我已经为 Qt4 构建了 qtserialport 并编写了一个控制台应用程序来记录来自设备的数据,该设备以 9600 波特、8 个数据位、1 个停止位和无奇偶校验发送信息,我认为这是串行通信的默认设置。我已经设法正确打开端口并按预期记录数据,但是每当我关闭应用程序或关闭计算机并尝试重新启动应用程序时,端口都会打开但给我一个“框架错误”。如果我关闭应用程序,然后使用超级终端打开端口,端口会正确打开,然后我可以打开控制台应用程序而不会出现错误。我已经读过可以使用奇偶校验来解决框架错误,但我真的不知道要使用什么设置,甚至不知道它是解决我的问题的方法。
//constructor
MyApp::MyApp()
{
QSerialPort *serialPort = new QSerialPort(this);
connect(serialPort,
SIGNAL(error(QSerialPort::SerialPortError)),
this,SLOT(serialError(QSerialPort::SerialPortError)));
serialPort->setPortName("COM1");
serialPort->setBaudRate(9600,QSerialPort::Input);
serialPort->setStopBits(QSerialPort::OneStop);
serialPort->setParity(QSerialPort::NoParity);
serialPort->setDataBits(QSerialPort::Data8);
serialPort->setFlowControl(QSerialPort::NoFlowControl);
if(serialPort->open(QIODevice::ReadOnly))
{
qDebug() << "Serial port opened at serialPort->portName();
}
}
...
void myApp::serialError(QSerialPort::SerialPortError error)
{
if(error != QSerialPort::NoError)
{
QMetaEnum metaEnum = QSerialPort::staticMetaObject.enumerator(
QSerialPort::staticMetaObject.indexOfEnumerator("SerialPortError"));
QString errStr(metaEnum.valueToKey(error));
qDebug() << errStr;
}
}