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);
0x11
和0x13
是Sofware Flow模式下的流控制字节。这就是 0x11
是 "dropped" 的原因。使用 NoFlowControl
意味着你必须自己控制流量。 IE。你不能在短时间内写入太多数据,因为你会丢失它。
我在 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);
0x11
和0x13
是Sofware Flow模式下的流控制字节。这就是 0x11
是 "dropped" 的原因。使用 NoFlowControl
意味着你必须自己控制流量。 IE。你不能在短时间内写入太多数据,因为你会丢失它。