1.概要
2.内容
为了测试你的Qt串口程序发送功能,可以通过以下步骤实现回环测试(无需硬件设备):
- 创建虚拟串口对(Ubuntu推荐方案):
# 安装socat工具
sudo apt install socat
# 创建虚拟串口对(ttyS0和ttyS1)
socat -d -d pty,raw,echo=0 pty,raw,echo=0
会得到类似:
2023/07/20 10:00:00 socat[1234] N PTY is /dev/pts/2
2023/07/20 10:00:00 socat[1234] N PTY is /dev/pts/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.toHex();
});
- 权限处理:
sudo usermod -aG dialout $USER # 将当前用户加入串口组
newgrp dialout # 立即生效(或重新登录)
- 测试流程:
- 启动接收程序(带上述接收端配置的程序)
- 在发送程序中执行:
QByteArray testData = "Hello Serial!";
serial.write(testData);
serial.flush();
- 接收程序控制台会立即显示接收到的数据
- 替代方案(快速验证):
// 在发送程序中添加回环测试
QSerialPort loopback;
loopback.setPortName("/dev/pts/2");
loopback.setBaudRate(QSerialPort::Baud115200);
loopback.open(QIODevice::ReadWrite); // 同时读写模式
// 发送后立即读取
loopback.write("TEST");
if(loopback.waitForReadyRead(1000)){
qDebug() << "Loopback received:" << loopback.readAll();
}
注意事项:
- 确保两端波特率等参数完全一致
- 虚拟串口设备名每次重启可能变化,建议写配置文件管理
- 复杂数据建议使用十六进制显示验证
- 实际硬件测试时需交叉连接TX/RX引脚(需电平转换器)
如果需要完整的接收端示例代码,可以告诉我,我可以提供带GUI显示的完整接收程序模板。
3.关联链接
4.关联知识