QT串口数据读取异常

曲79 2024-12-14 18:00:55
void MainWindow::on_serial_open_clicked()
{
    QSerialPort serial;
    serial.setPortName(ui->serial_box->currentText());
    serial.setBaudRate(ui->bate_box->currentText().toInt());
    serial.setDataBits(QSerialPort::Data8);
    serial.setParity(QSerialPort::NoParity);
    serial.setStopBits(QSerialPort::OneStop);
    qDebug() << serial.portName() << serial.baudRate() << endl;
    if (serial.open(QIODevice::ReadOnly))
    {
        qDebug() << "串口打开成功";
        if(serial.waitForReadyRead(1000))
        {
            for(int i = 0; i <= 100; i++)
            {
                data_efficient = convert_data(serial);
                qDebug() << data_efficient;
            }
            serial.close();
            qDebug() << "串口已关闭";
        }
        else
        {
            qDebug() << "串口连接超时";
            serial.close();
            qDebug() << "串口已关闭";
        }
    }
    else
    {
        qDebug() << "串口打开失败:" << serial.errorString();
    }
}


void MainWindow::on_serial_check_clicked()
{
    ui->serial_box->clear();
    foreach (const QSerialPortInfo &serial_info, QSerialPortInfo::availablePorts())
    {
        ui->serial_box->addItem(serial_info.portName());
    }
}

QList<QString> convert_data(QSerialPort &serial)
{
    QList<QString> convert;
    for(int i = 0; i <= 32; i++)
    {
        convert.append(serial.read(1).toHex());
    }
    return convert;
}

 

如图,打开串口后原计划接收101个长度为33的QList的数据,但是实际上接收100个字节后就接收不到数据了,将程序改为每次读取1个字节,循环101次也会出现上述问题

已知数据发送设备状态正常,请教各位大神是哪里出现了问题

 

 

 

...全文
153 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
mideum 2024-12-18
  • 打赏
  • 举报
回复 1

你的waitForReadyRead只调用了一次,有充分可能循环执行完的时候数据还没接收完
你可以看一下QSerialPort文档里的代码例子,waitForReadyRead是应该要放在循环里的

16,729

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧