【问题标题】:Unable to send data using QSerialPort无法使用 QSerialPort 发送数据
【发布时间】:2015-06-05 08:34:43
【问题描述】:

我正在尝试编写一个能够使用串行端口与我的嵌入式系统通信的 QT 应用程序。现在我正在使用Null Modem emulator 测试配置,因为我还没有准备好嵌入式系统。

模拟器工作正常,因为我在 Terraterm、RealTerm 或 Putty 等其他软件中对其进行了测试。我的问题是我的示例代码不起作用 - 它不会将字符串发送到另一个 com 端口。

这是我的代码:

void CSettingsDialog::on_pbSerialCheck_clicked()
{
    QSerialPort serial;
    serial.setPortName(ui->cbSerialPort->currentText());

    if (!serial.open(QIODevice::ReadWrite))
    {
        QMessageBox::warning(this, tr("Serial port"),
                             tr("Serial port %1 is busy!")
                            .arg(ui->cbSerialPort->currentText()));
    }
    else
    {
        serial.setBaudRate(QSerialPort::Baud115200);
        serial.setDataBits(QSerialPort::Data8);
        serial.setParity(QSerialPort::NoParity);
        serial.setStopBits(QSerialPort::OneStop);
        serial.setFlowControl(QSerialPort::NoFlowControl);
        serial.write("TEST\n");
        serial.close();
    }
}

查看 QT 示例,我确信我已经正确设置了所有内容。

【问题讨论】:

  • 查看write()的返回值
  • 你可以试试去掉close();
  • 我在开始时已经关闭注释掉了,它没有帮助。我现在没有电脑,所以我现在无法检查写入。
  • 由于对象是在堆上创建的,无论如何离开块时它都会被销毁,并且应该在其 dtor 中隐式调用 close()。所以收盘应该没问题。在写入和关闭之间尝试使用 waitForBytesWritten(),我不确定 QSerialPort 是否进行任何缓冲和异步写入。
  • @FrankOsterfeld 堆栈,而不是堆。

标签: qt c++11 serial-port uart


【解决方案1】:

我确信我已经正确设置了所有的 QT 例子。我将获得所有帮助!

阅读flush 文档时,似乎调用“写入”缓冲区,写入可能异步完成。

另见"Certain subclasses of...are asynchronous",在waitForBytesWritten上有cmets

【讨论】:

  • 这是问题,等待写入的字节解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
相关资源
最近更新 更多