Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用Qt打开串口_C++_Windows_Qt_Serial Port - Fatal编程技术网

C++ 用Qt打开串口

C++ 用Qt打开串口,c++,windows,qt,serial-port,C++,Windows,Qt,Serial Port,我在Qt中打开串行端口时遇到问题。尝试打开端口失败后,我收到的错误消息是不支持操作错误。我想指出两点: 我试图打开的端口是在使用USB(CDC)的ARM MCU中实现的 我可以在其他应用程序(如teraterm或realterm)中打开端口 我能够在Qt应用程序中每过一分钟就打开一个端口。我在ARM设备中添加了一些代码(根本不涉及USB功能),我无法再在Qt中打开端口 我测试了我可以在其他程序(即realterm)中打开的端口上发送/接收数据 该端口适用于其他应用程序,但不适用于Qt(尝试了Q

我在Qt中打开串行端口时遇到问题。尝试打开端口失败后,我收到的错误消息是
不支持操作错误
。我想指出两点:

  • 我试图打开的端口是在使用USB(CDC)的ARM MCU中实现的
  • 我可以在其他应用程序(如teraterm或realterm)中打开端口
  • 我能够在Qt应用程序中每过一分钟就打开一个端口。我在ARM设备中添加了一些代码(根本不涉及USB功能),我无法再在Qt中打开端口
  • 我测试了我可以在其他程序(即realterm)中打开的端口上发送/接收数据
  • 该端口适用于其他应用程序,但不适用于Qt(尝试了Qt creator提供的终端示例,但也无法打开该端口)
我过去曾遇到过这种行为,但没有时间进一步探讨。现在它挡住了我。开放港口会是什么情况?qt是否对其提出了任何附加要求?我真的很感激所有的帮助。 我正在windows计算机上运行qt

编辑:这是Qt creator负责打开端口的终端示例的一部分

void MainWindow::openSerialPort()
{
    SettingsDialog::Settings p = settings->settings();
    serial->setPortName(p.name);
    serial->setBaudRate(p.baudRate);
    serial->setDataBits(p.dataBits);
    serial->setParity(p.parity);
    serial->setStopBits(p.stopBits);
    serial->setFlowControl(p.flowControl);
    if (serial->open(QIODevice::ReadWrite)) {
        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 {
        qDebug() << "Failed to open serial port " << serial->portName() << "Error: " << serial->error();
        QMessageBox::critical(this, tr("Error"), serial->errorString());

        showStatusMessage(tr("Open error"));
    }
}
void主窗口::openSerialPort()
{
设置对话框::设置p=设置->设置();
串行->设置端口名(p.name);
串行->设定波特率(p.baudRate);
串行->设置数据位(p.dataBits);
串行->设置奇偶校验(p.奇偶校验);
串行->设置停止位(p.停止位);
串行->设置流量控制(p.流量控制);
如果(串行->打开(QIODevice::读写)){
控制台->设置启用(真);
控制台->设置LocalEchonabled(p.LocalEchonabled);
ui->actionConnect->setEnabled(假);
ui->actionDisconnect->setEnabled(真);
ui->actionConfigure->setEnabled(假);
showStatusMessage(tr(“连接到%1:%2、%3、%4、%5、%6”)
.arg(p.name).arg(p.stringBaudRate).arg(p.stringDataBits)
.arg(p.stringParity).arg(p.stringStopBits).arg(p.stringFlowControl));
}否则{

qDebug()您在Qt中面临一个bug或过度排斥行为。您不太可能在自己的代码中修复它


如果没有Qt的调试版本,也不可能进行调试。使用调试版本,您可以确定
QSerialPort
实现中失败的确切位置。然后,您将知道发生了什么,并能够在此基础上提交Qt错误报告。因为您将被设置为构建Qt,您可以自己修复错误并快速开始帽子道。

在不知道更改和代码的情况下,很难在这里进行故障排除。您是否创建了一个最小的Qt示例进行测试?终端Qt创建者提供的示例非常少。这也是关于我在ARM中的代码,而不是Qt。重点是我可以用其他程序打开端口,但不是Qt。我已经查看了qserialport.cpp文件以查找
UnsupportedOperationError
string。问题是我找不到任何匹配的错误代码。我的错误字符串是
QSerial端口::SerialPortError(UnsupportedOperationError)
。终端Qt creator的示例显示了相同的错误?请提供程序的最低版本以实现可跟踪性是的,终端示例给出了完全相同的错误。我将添加mwe。我尝试重新创建您的问题,并使用了我编写的以下示例代码:请参阅sserial.h,但我尝试的所有操作都按预期进行,我无法获得此错误为“UnsupportedOperationError”。如果没有“我在ARM设备中添加了一些代码”的详细信息,则很难确定问题。请运行此最低限度的程序,并让我知道这是否有效。