QSerialPort 丢弃字节

QSerialPort Dropping Bytes

我在 Qt5.5 (windows) 中使用 QSerialPort 发送接收数据,一切都按预期工作,除了在一种情况下,当发回的数据包含 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是Sofware Flow模式下的流控制字节。这就是 0x11 是 "dropped" 的原因。使用 NoFlowControl 意味着你必须自己控制流量。 IE。你不能在短时间内写入太多数据,因为你会丢失它。