QSerialPort丢弃字节



我使用QSerialPort在Qt5.5(windows)中发送接收数据,除了在一种情况下,当发送回的数据包含0x11时,一切都按预期工作。我看到这是一个特殊的ascii值,但我想将其作为原始字节读取。我的设置如下:

setBaudRate(QSerialPort::Baud115200);
setDataBits(QSerialPort::Data8);
setStopBits(QSerialPort::OneStop);
setFlowControl(QSerialPort::SoftwareControl);
setParity(QSerialPort::NoParity);

稍后。。。

open(QIODevice::ReadWrite);

我在连接到readyRead()的插槽中的读数:

buffer_.append(readAll());

其中buffer_是QByteArray。

一个示例数据包是:

0xBF 0x00 0x00 0x00 0x00 0x04 0x11 0x00 0x02 0x70 

我会收到的数据包:

0xBF 0x00 0x00 0x00 0x00 0x04 0x00 0x02 0x70 

根据Kamil Klimek的说法,我改为无流量控制,它可以工作。

setFlowControl(QSerialPort::NoFlowControl);

0x110x13是软件流模式下的流控制字节。这就是0x11被"丢弃"的原因。使用NoFlowControl意味着您必须自己控制流量。也就是说,你不能在短时间内写入太多数据,因为你会丢失它。

相关内容

  • 没有找到相关文章

最新更新