QT串口编程全面讲解

QT提供了强大的串口通信支持,通过QtSerialPort模块可以实现跨平台的串口通信功能。下面我将从基础到高级全面讲解QT串口编程。

一、QtSerialPort模块概述

QtSerialPort模块是QT5及以后版本中提供的串口通信库,它:

  • 支持Windows、Linux、macOS等主流操作系统
  • 提供同步和异步I/O操作
  • 支持常见的串口参数配置
  • 不依赖其他库,纯QT实现

要使用QtSerialPort模块,需要在项目文件中添加:

QT += serialport

二、基本串口操作

1. 查询可用串口

#include <QSerialPortInfo>

// 获取所有可用串口
QList<QSerialPortInfo> ports = QSerialPortInfo::availablePorts();

foreach (const QSerialPortInfo &port, ports) {
   
   
    qDebug() << "Port:" << port.portName();
    qDebug() << "Description:" << port.description();
    qDebug() << "Manufacturer:" << port.manufacturer();
    qDebug() << "System Location:" << port.systemLocation();
}

2. 打开和配置串口

#include <QSerialPort>

QSerialPort serial;

// 设置串口名
serial.setPortName("COM3"); // Windows
// serial.setPortName("/dev/ttyUSB0"); // Linux

// 打开串口
if (!serial.open(QIODevice::ReadWrite)) {
   
   
    qDebug() << "无法打开串口" << serial.portName() << ":" << serial.errorString();
    return;
}

// 设置波特率
serial.setBaudRate(QSerialPort::Baud9600); 

// 设置数据位
serial.setDataBits(QSerialPort::Data8);

// 设置校验位
serial.setParity(QSerialPort::NoParity);

// 设置停止位
serial.setStopBits(QSerialPort::OneStop);

// 设置流控制
serial.setFlowControl(QSerialPort::NoFlowControl);

3. 读写数据

写入数据:

QByteArray sendData = "Hello Serial Port!";
qint64 bytesWritten = serial.write(sendData);

if (bytesWritten == -1) {
   
   
    qDebug() << "写入数据失败:" << serial.errorString();
} else if (bytesWritten != sendData.size()) {
   
   
    qDebug() << "写入数据不完整";
} else {
   
   
    qDebug() << "数据写入成功";
}

// 确保数据被发送
if (!serial.waitForBytesWritten(1000)) {
   
   
    qDebug() << "等待写入超时或出错:" << serial.errorString();
}

读取数据:

// 连接readyRead信号
connect(&serial, &QSerialPort::readyRead, [&]() {
   
   
    QByteArray data = serial.readAll();
    while (serial.waitForReadyRead(10)) {
   
   
        data += serial.readAll();
    }
    qDebug() << "接收到数据:" << data;
});

// 或者同步读取
if (serial.waitForReadyRead(1000)) {
   
   
    QByteArray data = serial.readAll();
    while (serial.waitForReadyRead(10)) {
   
   
        data += serial.readAll();
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值