1.概要
2.内容
在 Ubuntu 下测试串口通信程序,可以通过以下方法实现自收自发测试。这里提供两种完整方案:
🛠️ 方案一:使用虚拟串口工具(推荐)
1. 安装虚拟串口工具
sudo apt install socat
2. 创建虚拟串口对
socat -d -d pty,raw,echo=0 pty,raw,echo=0
2023/07/20 14:30:00 socat[1234] N PTY is /dev/pts/2
2023/07/20 14:30:00 socat[1234] N PTY is /dev/pts/3
3. 配置你的Qt程序
// 发送端配置(使用第一个虚拟端口)
QSerialPort serial;
serial.setPortName("/dev/pts/2");
serial.setBaudRate(QSerialPort::Baud115200);
serial.open(QIODevice::WriteOnly);
// 接收端配置(使用第二个虚拟端口)
QSerialPort receiver;
receiver.setPortName("/dev/pts/3");
receiver.setBaudRate(QSerialPort::Baud115200);
receiver.open(QIODevice::ReadOnly);
// 连接接收信号
QObject::connect(&receiver, &QSerialPort::readyRead, [&](){
QByteArray data = receiver.readAll();
qDebug() << "Received:" << data;
});
🔄 方案二:硬件回环测试(需要物理串口)
1. 短接串口引脚
用杜邦线连接:
TX (发送端) ↔ RX (接收端)
GND ↔ GND
2. 配置串口参数
// 发送端配置
QSerialPort serial;
serial.setPortName("/dev/ttyUSB0"); // 根据实际设备修改
serial.setBaudRate(QSerialPort::Baud115200);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::NoFlowControl);
serial.open(QIODevice::ReadWrite); // 读写模式
3. 添加接收逻辑
// 在发送数据后立即读取
QByteArray sendData = "TEST DATA";
serial.write(sendData);
// 等待并读取回显
if (serial.waitForReadyRead(1000)) {
QByteArray response = serial.readAll();
if (response == sendData) {
qDebug() << "✅ 验证成功!";
} else {
qDebug() << "❌ 数据不匹配";
}
} else {
qDebug() << "⚠️ 接收超时";
}
🔍 验证工具推荐
- CuteCom(图形化工具):
使用方法:sudo apt install cutecom- 发送端选择
/dev/pts/2 - 接收端选择
/dev/pts/3
- 发送端选择
- minicom(终端工具):
sudo apt install minicom minicom -D /dev/ttyUSB0 -b 115200
💡 常见问题排查
-
权限问题:
sudo usermod -aG dialout $USER # 添加用户到串口组 newgrp dialout # 立即生效波特率不匹配:
确保发送端和接收端使用完全相同的参数:// 典型配置 Baud115200, Data8, NoParity, OneStop缓冲区处理:
// 发送端添加延迟 serial.write(data); serial.flush(); QThread::msleep(10); // 等待硬件缓冲
📊 测试结果验证
成功时应该看到:
Received: "TEST DATA"
✅ 验证成功!
如果失败,检查:
- 虚拟端口是否配对正确
- 串口线是否连接可靠
- 波特率等参数是否完全一致
- 是否有其他程序占用串口
建议先用虚拟串口方案测试通过后,再进行硬件连接测试。
1221

被折叠的 条评论
为什么被折叠?



