Qt串口通信全攻略:从配置到实战

串口通信基础

串口(Serial Port)是一种硬件接口,用于设备间的异步串行通信。在工业控制、嵌入式设备中广泛应用。Qt提供了QSerialPort类,支持跨平台串口操作,需包含头文件<QSerialPort><QSerialPortInfo>

环境配置

  1. Qt项目配置
    pro文件中添加串口模块依赖:
    QT += serialport
    
  2. 检查可用串口
    通过QSerialPortInfo获取系统串口列表:
    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
        qDebug() << "Port:" << info.portName();
        qDebug() << "Description:" << info.description();
    }
    

串口参数设置

关键参数包括波特率、数据位、停止位、校验位。示例配置:

QSerialPort serial;
serial.setPortName("COM1"); // Windows示例,Linux通常为"/dev/ttyS0"
serial.setBaudRate(QSerialPort::Baud9600);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::NoFlowControl);
if (!serial.open(QIODevice::ReadWrite)) {
    qDebug() << "Failed to open port:" << serial.errorString();
}

数据读写操作

  1. 写入数据
    使用write()发送数据,需确保端口已打开:
    QByteArray sendData = "Hello Serial";
    qint64 bytesWritten = serial.write(sendData);
    if (bytesWritten == -1) {
        qDebug() << "Write error:" << serial.errorString();
    }
    
  2. 读取数据
    通过readyRead信号触发读取:
    QObject::connect(&serial, &QSerialPort::readyRead, [&]() {
        QByteArray data = serial.readAll();
        qDebug() << "Received:" << data;
    });
    

错误处理与调试

  • 错误信号:监听errorOccurred信号捕获异常:
    QObject::connect(&serial, &QSerialPort::errorOccurred, [&](QSerialPort::SerialPortError error) {
        if (error != QSerialPort::NoError) {
            qDebug() << "Error:" << serial.errorString();
        }
    });
    
  • 超时设置:通过setRequestToSendsetDataTerminalReady控制硬件流超时。

示例:完整收发流程

QSerialPort serial;
// 配置参数(略)
if (serial.open(QIODevice::ReadWrite)) {
    serial.write("Test Message");
    while (serial.waitForReadyRead(1000)) { // 等待1秒
        QByteArray response = serial.readAll();
        while (serial.waitForReadyRead(10))
            response += serial.readAll();
        qDebug() << "Response:" << response;
    }
} else {
    qDebug() << "Open failed:" << serial.errorString();
}
serial.close();

注意事项

  • 跨平台差异:Windows使用COMx,Linux/macOS使用/dev/ttyX
  • 权限问题:Linux需确保用户有串口设备访问权限(如加入dialout组)。
  • 资源释放:程序退出前调用close()释放端口。

通过以上步骤可实现Qt下的串口通信功能,适用于数据采集、设备调试等场景。

BbS.okapop061.sbs/PoSt/1122_742749.HtM
BbS.okapop062.sbs/PoSt/1122_886669.HtM
BbS.okapop063.sbs/PoSt/1122_418123.HtM
BbS.okapop065.sbs/PoSt/1122_766792.HtM
BbS.okapop066.sbs/PoSt/1122_395914.HtM
BbS.okapop067.sbs/PoSt/1122_871227.HtM
BbS.okapop068.sbs/PoSt/1122_069647.HtM
BbS.okapop069.sbs/PoSt/1122_668213.HtM
BbS.okapop070.sbs/PoSt/1122_890945.HtM
BbS.okapop071.sbs/PoSt/1122_563866.HtM
BbS.okapop061.sbs/PoSt/1122_603399.HtM
BbS.okapop062.sbs/PoSt/1122_068599.HtM
BbS.okapop063.sbs/PoSt/1122_671186.HtM
BbS.okapop065.sbs/PoSt/1122_716947.HtM
BbS.okapop066.sbs/PoSt/1122_521466.HtM
BbS.okapop067.sbs/PoSt/1122_870852.HtM
BbS.okapop068.sbs/PoSt/1122_402396.HtM
BbS.okapop069.sbs/PoSt/1122_798518.HtM
BbS.okapop070.sbs/PoSt/1122_542569.HtM
BbS.okapop071.sbs/PoSt/1122_034176.HtM
BbS.okapop061.sbs/PoSt/1122_403293.HtM
BbS.okapop062.sbs/PoSt/1122_980476.HtM
BbS.okapop063.sbs/PoSt/1122_269775.HtM
BbS.okapop065.sbs/PoSt/1122_796978.HtM
BbS.okapop066.sbs/PoSt/1122_646513.HtM
BbS.okapop067.sbs/PoSt/1122_678575.HtM
BbS.okapop068.sbs/PoSt/1122_602336.HtM
BbS.okapop069.sbs/PoSt/1122_474149.HtM
BbS.okapop070.sbs/PoSt/1122_162979.HtM
BbS.okapop071.sbs/PoSt/1122_356331.HtM
BbS.okapop061.sbs/PoSt/1122_228616.HtM
BbS.okapop062.sbs/PoSt/1122_989407.HtM
BbS.okapop063.sbs/PoSt/1122_306647.HtM
BbS.okapop065.sbs/PoSt/1122_161334.HtM
BbS.okapop066.sbs/PoSt/1122_615461.HtM
BbS.okapop067.sbs/PoSt/1122_834167.HtM
BbS.okapop068.sbs/PoSt/1122_796431.HtM
BbS.okapop069.sbs/PoSt/1122_537119.HtM
BbS.okapop070.sbs/PoSt/1122_505757.HtM
BbS.okapop071.sbs/PoSt/1122_834634.HtM
BbS.okapop061.sbs/PoSt/1122_773549.HtM
BbS.okapop062.sbs/PoSt/1122_790353.HtM
BbS.okapop063.sbs/PoSt/1122_605331.HtM
BbS.okapop065.sbs/PoSt/1122_520128.HtM
BbS.okapop066.sbs/PoSt/1122_779151.HtM
BbS.okapop067.sbs/PoSt/1122_610399.HtM
BbS.okapop068.sbs/PoSt/1122_253806.HtM
BbS.okapop069.sbs/PoSt/1122_814335.HtM
BbS.okapop070.sbs/PoSt/1122_923336.HtM
BbS.okapop071.sbs/PoSt/1122_226244.HtM
BbS.okapop061.sbs/PoSt/1122_138974.HtM
BbS.okapop062.sbs/PoSt/1122_494438.HtM
BbS.okapop063.sbs/PoSt/1122_217266.HtM
BbS.okapop065.sbs/PoSt/1122_134688.HtM
BbS.okapop066.sbs/PoSt/1122_847863.HtM
BbS.okapop067.sbs/PoSt/1122_731680.HtM
BbS.okapop068.sbs/PoSt/1122_825525.HtM
BbS.okapop069.sbs/PoSt/1122_273843.HtM
BbS.okapop070.sbs/PoSt/1122_603991.HtM
BbS.okapop071.sbs/PoSt/1122_707799.HtM
BbS.okapop072.sbs/PoSt/1122_232133.HtM
BbS.okapop073.sbs/PoSt/1122_384216.HtM
BbS.okapop074.sbs/PoSt/1122_212348.HtM
BbS.okapop075.sbs/PoSt/1122_976231.HtM
BbS.okapop076.sbs/PoSt/1122_200934.HtM
BbS.okapop077.sbs/PoSt/1122_286295.HtM
BbS.okapop078.sbs/PoSt/1122_585910.HtM
BbS.okapop079.sbs/PoSt/1122_307904.HtM
BbS.okapop080.sbs/PoSt/1122_064128.HtM
BbS.okapop081.sbs/PoSt/1122_011412.HtM
BbS.okapop072.sbs/PoSt/1122_549325.HtM
BbS.okapop073.sbs/PoSt/1122_642692.HtM
BbS.okapop074.sbs/PoSt/1122_739108.HtM
BbS.okapop075.sbs/PoSt/1122_978280.HtM
BbS.okapop076.sbs/PoSt/1122_308298.HtM
BbS.okapop077.sbs/PoSt/1122_686611.HtM
BbS.okapop078.sbs/PoSt/1122_723097.HtM
BbS.okapop079.sbs/PoSt/1122_559459.HtM
BbS.okapop080.sbs/PoSt/1122_981033.HtM
BbS.okapop081.sbs/PoSt/1122_246152.HtM

#牛客AI配图神器#

全部评论

相关推荐

迷茫的大四🐶:💐孝子启动失败,改为启动咏鹅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务