You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QT Creator串口向Raspberry Pico发送数据失败求助

问题分析与解决方案

核心问题拆解

  • 串口发送后直接关闭端口,导致数据未实际发送到Pico(Qt串口写入为异步操作)
  • 未初始化QApplication,触发Qt内部定时器相关警告
  • 可能缺少Pico期望的命令结束符(对应Hercules切换到Data模式的行为逻辑)

修复后的代码

#include <QSerialPort>
#include <QDebug>
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv); // 初始化QApplication,解决定时器警告

    QSerialPort serialPort;

    serialPort.setPortName("COM12");
    serialPort.setBaudRate(QSerialPort::Baud115200);
    serialPort.setDataBits(QSerialPort::Data8);
    serialPort.setParity(QSerialPort::NoParity);
    serialPort.setStopBits(QSerialPort::OneStop);
    serialPort.setFlowControl(QSerialPort::NoFlowControl);

    if (serialPort.open(QIODevice::WriteOnly))
    {
        // 加入Pico可能需要的换行结束符,匹配Hercules Data模式的行为
        QByteArray input = QString("addPoints\r\n").toLocal8Bit();
        qint64 bytesWritten1 = serialPort.write(input);
        qint64 bytesWritten2 = serialPort.write("test\r\n");

        // 等待所有数据写入完成,超时设为1000ms
        if (serialPort.waitForBytesWritten(1000))
        {
            qint64 totalBytes = bytesWritten1 + bytesWritten2;
            qDebug() << "Data sent successfully, total bytes:" << totalBytes;
        }
        else
        {
            qDebug() << "Failed to write all data:" << serialPort.errorString();
        }

        serialPort.close();
    }
    else
    {
        qDebug() << "Failed to open serial port:" << serialPort.errorString();
    }

    return 0;
}

关键修复说明

  1. 初始化QApplication:QSerialPort依赖Qt事件循环,未初始化会触发内部定时器警告,这就是你看到QObject::startTimer错误的原因。
  2. 等待数据写入完成:serialPort.write()是异步调用,直接关闭端口会导致缓冲区数据被丢弃,waitForBytesWritten()会阻塞直到数据发送完成或超时。
  3. 添加命令结束符:Hercules的Data模式大概率会自动添加换行/回车作为数据结束标记,Pico的接收逻辑可能需要这个标记识别完整命令,因此在发送字符串后追加\r\n。
  4. 统一检查写入操作:原代码仅检查了第一次写入结果,修复后合并统计总发送字节数,确保所有写入操作的状态都被捕获。

内容的提问来源于stack exchange,提问作者StenManne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:13:35