虚拟 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 串行端口的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式02 STM32 实验01 端口复用和重映射

从 STM32 Nucleo-F767ZI [Ubuntu] 中的 USB 虚拟 COM 读取数据

STM32 bluepill USB 引导加载程序 DFU

Qt 串行端口错误 - 未读取数据

Windows 7 上的奇怪行为 QT QSerialPort 不会更改串行 com 端口的设置

从USB Virtual Com Port设备检测打开的PC COM端口