QSerialPort丢弃字节

时间:2015-12-30 13:40:47

标签: windows qt qt5

我正在使用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 

2 个答案:

答案 0 :(得分:1)

按照Kamil Klimek的说法,我改为无流量控制而且有效。

setFlowControl(QSerialPort::NoFlowControl);

答案 1 :(得分:0)

0x110x13是Sofware Flow模式下的流控制字节。这就是为什么0x11被删除"。使用NoFlowControl意味着您必须自己控制流量。即你不能在短时间内写出大量数据,因为你会失去它。