gpt4 book ai didi

c++ - QtSerialPort 成帧错误

转载 作者:行者123 更新时间:2023-11-28 07:39:58 26 4
gpt4 key购买 nike

我为 Qt4 构建了 qtserialport 并编写了一个控制台应用程序来记录来自设备的数据,该设备以 9600 波特、8 个数据位、1 个停止位和无奇偶校验发送信息,我认为这是串行通信的默认设置。我已设法正确打开端口并按预期记录数据,但每当我关闭应用程序或关闭计算机并尝试重新启动应用程序时,端口打开但给我一个“framingError”。如果我关闭应用程序然后使用 super 终端打开端口,端口会正确打开,然后我就可以无误地打开我的控制台应用程序。我读到可以使用奇偶校验来解决帧错误,但我真的不知道要使用什么设置,甚至不知道这是解决我的问题的方法。

    //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;
}
}

最佳答案

当 UART 未检测到停止位时,会产生帧错误。常见原因有:

  • 错误的波特率或在设备发送时更改波特率
  • 设备发送的数据或奇偶校验位比您预期的多
  • 停止位的数量不匹配
  • 在设备通电的情况下重新连接电缆
  • 软件在端口打开时没有清除错误状态

如果您在打开端口后只收到一个帧错误,请忽略它。如果它们在设备发送时不断触发,则说明您配置的端口有误。请避免使用 QSerialPort::NoFlowControl,大多数设备都实现硬件握手。像 HyperTerminal 这样的程序将始终打开它。询问了解该设备的人它是如何配置的,这样您就可以停止猜测。

关于c++ - QtSerialPort 成帧错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16048001/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com