1 串口通信的基础知识
1. 串行与并行:串口通信是一种串行通信方式。这意味着数据一位一位地通过通信线发送,这与并行通信 不同,后者一次可以发送多个位。虽然串行通信在速度上可能不如并行通信快,但它可以在长距离上进 行,而且硬件成本较低。
2. 同步与异步:串口通信通常是异步的。这意味着发送设备和接收设备不需要同时进行。在异步通信中, 每个字节的开始和结束由开始位和停止位标记。另一方面,同步通信需要发送设备和接收设备在时间上 同步,但可以以更高的速率发送数据。
3. 通信参数:串口通信需要设定一些参数以保证发送设备和接收设备能够正确地解码数据。这些参数包括 串口号,波特率(数据传输的速度),数据位(每个字节的位数),奇偶校验(一种错误检测方法), 和停止位(标记字节结束的位数)。
4. 通信方式可以分为以下三种( RS-485是半双工; RS-232是全双工): 1 ,单工通信:数据只能在一个方向上流动。例如,广播系统就是单工通信,信息只能从广播台传输到 收听者,反之则不行。 2 ,全双工通信:数据可以同时在两个方向上流动,且不会产生冲突。例如,电话就是全双工通信,双 方可以同时进行说话和听话。 3 ,半双工通信:数据可以在两个方向上流动,但不能同时进行。这就意味着,如果一方正在发送数 据,那么另一方就必须等待,直到发送完毕后才能开始发送数据。
2 需要准备的工具
如果没有相应的硬件,在电脑上可以使用虚拟串口工具进行,将两个COM口进行连通信。
虚拟串口工具: https://pan.baidu.com/s/1YTTRP33LWkELX6GzekeCWQ?pwd=mqlc 提取码: mqlc
第三方串口工具(用来验证我们写的串口工具是否正确): https://pan.baidu.com/s/1QRW8Wq3io5B6DD _jLP0Yug?pwd=mqlc
提取码: mqlc
3 Qt中的串口编程
QSerialPort 是 Qt 库中用于串行通信的类,提供了一种跨平台的方式来处理串行端口。它可以被用于多种不 同的串行通信任务,包括 RS-232 和 RS-485 通信。
1. 跨平台性: QSerialPort 支持许多不同的平台,包括 Windows,Linux ,macOS 和更多。
2. 易用性: QSerialPort 提供了一种简单的接口来打开和关闭串行端口,设置通信参数(如波特率,数据 位,停止位和奇偶校验),并读写数据。
3. 信号和槽:与 Qt 的其他类一样, QSerialPort 利用 Qt 的信号和揽子系统来处理异步事件。
3.1 引入QSerialPort
1. 在pro文件中加入: QT += serialport
2. .h或者.cpp中加入: #include <QSerialPort>
3.2 设置参数
#include <QSerialPort QSerialPort *serial = new QSerialPort; serial->setPortName("COM1"); // 设置串行端口 serial->setBaudRate(QSerialPort::Baud9600); // 设置波特率 serial->setDataBits(QSerialPort::Data8); // 设置数据位 serial->setParity(QSerialPort::NoParity); // 设置奇偶校验 serial->setStopBits(QSerialPort::OneStop); // 设置停止位 if (serial->open(QIODevice::ReadWrite)) { // 串行端口已成功打开 } else { // 打开串行端口失败 } |
3.3 读取数据
serialCom = new QSerialPort(); connect(serialCom,SIGNAL(readyRead()),this,SLOT(onReadyRead())); if(serialCom->bytesAvailable() <= 0) { return; } QByteArray temp = serialCom->readAll(); QString data = byteArrayToHexStr(temp); emit msgTip(0,data); |
3.4 发送数据
if(!serialCom->isOpen()) return; QByteArray sendData = "1 2 3"; serialCom->write(sendData); |
4 源码
源码1:https://gitee.com/mqinglang/qt
高级地址:
链接: https://pan.baidu.com/s/1TXxDgrast7E3Pwt-2xDxXA?pwd=mqlc
提取码: mqlc
1. 自定义界面UI布局(无边框)、 qss
2. 支持跨版本QT4、QT5、QT6
3. 支持Win、 linux平台( mac未测试,理论应该也可以)
4. 支持图形字体(右上角菜单栏)
5. 支持底部状态栏
6. 支持自定义数据显示区域
7. 支持异步串口收发数据
8. 支持指定字节高亮显示
9. 支持定时发送数据,以及数据校验