【发布时间】: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