我在Windows 8.1中使用Qt 5.5.1版。 当我运行qtserialport terminal example时, 程序成功连接到端口,但没有收到任何数据。
但是当我关闭这个程序并打开Hercules_3-2-6应用程序(rs232终端软件)时,该应用程序读取数据, 在再次关闭Hercules_3-2-6应用程序和打开终端示例后,该程序将工作并读取数据,直到重新启动计算机。
我多次重复这个过程。
但是重启系统后终端项目没有收到任何数据,直到Hercules_3-2-6应用程序端口打开一次。
端口规格: 名称:COM3, 波特率:9600, 数据位:8, 平价:没有, 停止位:1, 流量控制:无
b
答案 0 :(得分:1)
只需在打开后配置串口即可。如果您在这些说明后打开端口:
serial->setBaudRate(p.baudRate);
serial->setDataBits(p.dataBits);
serial->setParity(p.parity);
serial->setStopBits(p.stopBits);
serial->setFlowControl(p.flowControl);
他们被忽略了。您的第二个程序为您配置了串行端口,并在您启动程序时保留配置。
试试这个:
void MainWindow::openSerialPort()
{
SettingsDialog::Settings p = settings->settings();
serial->setPortName(p.name);
if (serial->open(QIODevice::ReadWrite)) {
serial->setBaudRate(p.baudRate);
serial->setDataBits(p.dataBits);
serial->setParity(p.parity);
serial->setStopBits(p.stopBits);
serial->setFlowControl(p.flowControl);
console->setEnabled(true);
console->setLocalEchoEnabled(p.localEchoEnabled);
ui->actionConnect->setEnabled(false);
ui->actionDisconnect->setEnabled(true);
ui->actionConfigure->setEnabled(false);
showStatusMessage(tr("Connected to %1 : %2, %3, %4, %5, %6")
.arg(p.name).arg(p.stringBaudRate).arg(p.stringDataBits)
.arg(p.stringParity).arg(p.stringStopBits).arg(p.stringFlowControl));
} else {
QMessageBox::critical(this, tr("Error"), serial->errorString());
showStatusMessage(tr("Open error"));
}
}
void MainWindow::readData()
{
QByteArray data = serial->readAll();
console->putData(data);
}
配置串口时必须注意,任何选项都可以返回true或false;最佳实践想要检查和管理可以返回的每个错误。