【问题标题】:QSerialPort Dropping BytesQSerialPort 丢弃字节
【发布时间】:2016-01-01 04:19:14
【问题描述】:

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

【问题讨论】:

  • 尝试禁用流量控制 - QSerialPort::NoFlowControl

标签: windows qt qt5


【解决方案1】:

根据 Kamil Klimek,我将其更改为无流量控制并且它可以工作。

setFlowControl(QSerialPort::NoFlowControl);

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 2022-08-17
      • 2011-06-02
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多