虚拟 COM 端口 STM32 和 Qt 串行端口
Posted
技术标签:
【中文标题】虚拟 COM 端口 STM32 和 Qt 串行端口【英文标题】:Virtual COM Port STM32 and Qt Serial Port 【发布时间】:2021-01-28 13:53:53 【问题描述】:我的目标是在 QtCreator 中创建的 Qt 应用程序中通过 STM32 上的 USB CDC HS 与基于 Ubuntu 20.04 的 PC 进行通信。
到目前为止,我已经设法通过 UART 进行通信,并且一切正常。然后我决定切换到 USB,我仍然可以读取传入的数据(但只能在 CuteCom 中)并且在我的 Qt 应用程序中什么也没有出现。
说实话,我不知道发生了什么以及在哪里寻找错误。我把代码放在这里:
void MainWindow::on_pushButtonConnect_clicked()
if (ui->comboBoxDevices->count() == 0)
this->addToLogs("No devices found.");
return;
QString portName = ui->comboBoxDevices->currentText().split(" ").first();
this->device->setPortName(portName);
this->device->setBaudRate(QSerialPort::Baud115200);
this->device->setDataBits(QSerialPort::Data8);
this->device->setParity(QSerialPort::NoParity);
this->device->setStopBits(QSerialPort::OneStop);
this->device->setFlowControl(QSerialPort::NoFlowControl);
if(device->open(QIODevice::ReadWrite))
this->addToLogs("Port opened. Setting the connection params...");
this->addToLogs("UART enabled.");
qDebug() << "Writing down the parameters...";
qDebug() << "Baud rate:" << this->device->baudRate();
qDebug() << "Data bits:" << this->device->dataBits();
qDebug() << "Stop bits:" << this->device->stopBits();
qDebug() << "Parity:" << this->device->parity();
qDebug() << "Flow control:" << this->device->flowControl();
qDebug() << "Read buffer size:" << this->device->readBufferSize();
qDebug() << "Read buffer size:" << this->device->portName();
connect(this->device, SIGNAL(readyRead()), this, SLOT(readFromPort()));
else
this->addToLogs("The port can not be opened.");
还有 readFromPort() 函数:
void MainWindow::readFromPort()
while(this->device->canReadLine())
QString line = this->device->readLine();
qDebug() << line;
QString terminator = "\r";
int pos = line.lastIndexOf(terminator);
qDebug()<<line.left(pos);
this->addToLogs(line.left(pos));
您知道什么可能是错误的或设置不正确吗?将感谢所有帮助。
【问题讨论】:
【参考方案1】:看起来,在我的代码中,我在if
中输入了读取端口的命令(函数canReadLine()
)。当我将整个条件注释掉,只留下读数时,一切正常。
【讨论】:
以上是关于虚拟 COM 端口 STM32 和 Qt 串行端口的主要内容,如果未能解决你的问题,请参考以下文章
从 STM32 Nucleo-F767ZI [Ubuntu] 中的 USB 虚拟 COM 读取数据