Qt串口通信与驱动交互故障排查 - 第1节

一、串口通信基础:RS232/RS485/RS422 标准对比

串口通信,说白了就是设备之间「按位聊天」的方式。我做了十几年嵌入式,跟串口打交道的次数比跟老婆说话还多。很多初学者一上来就纠结RS232、RS485、RS422的区别,其实没那么玄乎。

这三种标准,本质上是物理层的差异。它们定义了电压怎么摆、线怎么接、能传多远。我当年第一次做项目,选错了RS232,结果现场距离差了20米,数据全乱码。嗯,从那以后我再也不敢小看物理层了。

1.1 三种标准的核心差异

特性 RS232 RS485 RS422
传输方式 单端(不平衡) 差分(平衡) 差分(平衡)
最大距离 约15米 约1200米 约1200米
最大节点数 1发1收 32个(可扩展) 1发10收
电压范围 ±3V ~ ±15V ±1.5V ~ ±6V ±2V ~ ±6V
常用场景 调试口、短距设备 工业总线、多机通信 长距点对多点

你想想看,RS232用单端信号,地线一长就容易受干扰。RS485和RS422用差分对,两根线拧在一起,噪声在两根线上同时出现,一减就没了。这就是为什么工业现场清一色用RS485。

我的经验: 做Qt串口调试时,如果发现数据偶尔错位,先别急着查代码。拿万用表量一下RS232的TX和GND之间的电压。正常空闲状态应该是-3V到-15V。如果量出来是0V,八成是线断了或者芯片烧了。

1.2 RS232 引脚定义与接线

RS232最常见的接口是DB9,9个针脚。但实际项目中,我们只用其中3根:TX、RX、GND。我见过太多人把2、3脚接反,结果数据发出去收不到,还以为是程序写错了。

引脚号 信号名 方向(DTE侧) 说明
2 RXD 输入 接收数据
3 TXD 输出 发送数据
5 GND - 信号地
7 RTS 输出 请求发送(流控用)
8 CTS 输入 允许发送(流控用)

注意: 我曾经遇到一个坑——某工控机的DB9定义跟标准相反,它的2脚是TX,3脚是RX。所以拿到设备第一件事,拿示波器或者逻辑分析仪确认一下引脚定义,别信标签。

二、波特率/数据位/停止位/校验位详解

这些参数决定了串口通信的「语速」和「语法」。两边必须完全一致,否则收到的全是乱码。我调试时最常犯的错误就是波特率设错——9600和115200差了一个数量级,数据根本对不上。

2.1 波特率

波特率就是每秒传输的符号数。常见的有:9600、19200、38400、115200、921600。

  • 9600:最通用,抗干扰强,适合长距离
  • 115200:速度快,适合短距调试
  • 921600:高速传输,但线缆质量要求高

我个人习惯:调试阶段用115200,速度快,刷日志不卡。现场部署如果距离超过10米,降到9600或19200,稳当。

2.2 数据位

数据位通常是7位或8位。7位用于ASCII字符传输(比如老式电传机),8位用于二进制数据。现在99%的场景都用8位。你想想看,一个字节8位,用7位还得拼凑,何必呢?

2.3 停止位

停止位是每个字节结束后的间隔,可以是1位、1.5位或2位。1位最常用。2位用于慢速设备或机械式设备,给接收端更多时间处理。

小技巧: 如果通信偶尔丢字节,试试把停止位从1改成2。相当于给接收端多喘口气的时间。我在一个老式PLC项目里就这么解决的。

2.4 校验位

校验位用于简单的错误检测。有三种模式:

  • 无校验(None):最常用,不额外开销
  • 奇校验(Odd):数据位+校验位中1的个数为奇数
  • 偶校验(Even):数据位+校验位中1的个数为偶数

说实话,校验位只能检测奇数个位翻转,实际用处有限。真正要可靠传输,得上CRC或者应用层校验。我一般只在调试时开校验,看看是不是有干扰。

三、串口硬件接线与引脚定义

接线是串口通信的第一步,也是最容易出问题的一步。我见过有人把RS485的A、B线接反,结果数据全反相,折腾了两天。

3.1 标准接线方式

RS232 三线制接线:

设备A TX —— 设备B RX
设备A RX —— 设备B TX
设备A GND —— 设备B GND

RS485 两线制接线:

设备A A(+) —— 设备B A(+)
设备A B(-) —— 设备B B(-)
设备A GND —— 设备B GND(建议接)

RS422 四线制接线:

设备A TX+ —— 设备B RX+
设备A TX- —— 设备B RX-
设备A RX+ —— 设备B TX+
设备A RX- —— 设备B TX-
设备A GND —— 设备B GND(建议接)

避坑指南: 我曾经在RS485总线上没接终端电阻,结果长距离通信时信号反射严重,数据错得一塌糊涂。120欧姆电阻并接在总线最远两端,这是标准做法,别省。

3.2 常见接线错误

  1. TX/RX接反:数据发出去收不到,但能收到自己发的(回环)
  2. GND没接:RS232必须共地,否则电压参考点不同
  3. RS485 A/B接反:数据反相,逻辑0变1,1变0
  4. 终端电阻缺失:长距离信号反射,数据错位

四、知识体系结构图

下面这张图把本章的核心知识点串起来了。你可以把它当作串口通信的「地图」,以后遇到问题先看这张图定位。

串口通信知识体系结构图 串口通信基础 RS232 / RS485 / RS422 波特率/数据位/停止位/校验 硬件接线与引脚定义 单端信号 差分信号 9600/115200 8N1/7E1 DB9引脚 A/B线 核心原则:收发双方参数必须完全一致 先确认物理层,再排查协议层

五、实战要点总结

这一章的内容,说白了就是串口通信的「基本功」。我建议你记住三件事:

  1. 先看物理层:电压对不对?线接对了没?地线接了没?
  2. 再对参数:波特率、数据位、停止位、校验位,两边一字不差
  3. 最后查协议:如果前两步都对了,数据还是不对,那就是协议层的问题了

我的习惯: 每次新项目拿到设备,第一件事就是拿串口助手发个0x55(二进制01010101),用示波器看波形。如果波形规整、幅度正确,说明硬件没问题。这一步能省掉后面80%的排查时间。