串口通信入门:RS232/RS485基础、波特率、数据位、停止位、校验位

说实话,很多刚接触上位机开发的朋友,一上来就被这几个参数搞晕了。我当年第一次调XY2-100的串口时,也为此熬夜查资料。其实串口通信没那么玄乎,说白了就是两台设备之间约好一套“说话规则”——什么电压算1、什么电压算0,每秒说几个字,每个字包含几个比特,说完一句话要不要做个标记。

串口通信的三个核心要素:物理层信号标准、时序参数、数据帧格式。三者缺一不可。

1. RS232与RS485——不同的“方言”

物理层标准决定了硬件怎么连接。RS232和RS485就像两个人用不同的音量讲话:

  • RS232:单端信号,一根线传数据,另一根接地。电压范围+3~+15V表示逻辑0,-3~-15V表示逻辑1。抗干扰能力弱,传输距离15米左右。适合短距离、一对一通信。
  • RS485:差分信号,两根线(A、B)同时传,靠电压差判断逻辑。抗干扰能力强,最远可以到1200米,而且支持多节点组网。

我在一个仓储机器人项目里用过RS485,现场电机启动时,RS232的数据经常丢包,换成RS485后一切正常。嗯,很多PLC和工业仪表都偏爱RS485,XY2-100也不例外。

2. 波特率——说话的语速

波特率就是每秒传输的符号数,单位是bps(bits per second)。常见的值有9600、19200、115200等。

选择波特率要平衡速度和稳定性。速度太快,信号在长线上会衰减;太慢,传输效率低。我一般先用115200测试,如果通信不稳定再降到9600。

注意:发送端和接收端的波特率必须完全一致,哪怕差一点点都会导致乱码。有些国产设备标称9600,实际可能跑在9602附近,这就得用逻辑分析仪去校准了。

3. 数据位——每个字包含多少比特

数据位是一帧中真正传输信息的比特数量。常见的是8位(一字节)或7位(ASCII字符)。

  • 8位:最常用,直接传输一个字节(0~255),适合二进制数据。
  • 7位:常用于纯ASCII文本,比如一些老式传感器。

我曾经遇到过一个温控仪表,数据手册写的是8位数据位,但实际需要配成7位才能正常通信。遇到这类情况,别死磕文档,多试试不同组合。

4. 停止位——句号的作用

数据位传输完后,需要一段停止时间来标识帧结束。停止位就是1位或2位的高电平。

  • 1位停止位:默认配置,效率高。
  • 2位停止位:给接收端更多处理时间,适用于低速设备或长距离通信。

一般在XY2-100通信中,我们使用1位停止位就够了。除非你的布线上有严重干扰,可以考虑2位。

5. 校验位——检查数据是否被篡改

校验位是一种简单的检错机制。可选无校验(None)、奇校验(Odd)、偶校验(Even)。还有Mark和Space,不过很少用。

  • 无校验:不附加额外比特,性能最高。适合信噪比好的环境。
  • 奇校验:数据中1的个数加上校验位,使得总数为奇数。
  • 偶校验:总数为偶数。

我习惯在调试阶段先用无校验,等通信调通了再决定是否加校验。因为加了校验后,如果发送方和接收方共识不一致,反而会报错。

6. 参数配置速查表

下表是XY2-100最常用的串口参数组合,直接复制粘贴即可:

参数推荐值说明
接口标准RS485差分信号,抗干扰,支持多节点
波特率9600 / 115200长距离用9600,短距离用115200
数据位8二进制数据传输
停止位1标准配置
校验位None通信稳定时可不加

7. 教你如何一步一步匹配参数

在实际项目中,我建议按照这个流程来配置(也是下面这张SVG图的思路):

  1. 确认物理层:读设备手册,确定用RS232还是RS485。
  2. 尝试常用波特率:从115200开始,不行就降到9600。
  3. 固定数据位和停止位:8N1(8数据位,无校验,1停止位)是万能钥匙。
  4. 发送简单测试帧:比如向XY2-100发送0x55(二进制01010101),看回传是否一致。
  5. 若失败,逐项微调:先改校验位,再改停止位,最后改数据位。
有一个小窍门:发送0x55 0xAA两个字节,用示波器抓波形,数一数每个字节前后的电平数量,就能快速反推出当前设备的波特率和数据格式。

8. 本章核心结构

下面这张图帮你理清串口参数配置的全链路关系:

串口通信参数配置流程 串口通信基础 物理层标准 时序参数 数据帧格式 RS232 RS485 波特率 (9600/115200) 数据位 (7/8) 停止位 (1/2) 校验位(N/O/E) 最终串口配置 实际运用时建议从“8N1”开始

从图中可以看到,物理层、时序、帧格式三者汇合最终形成串口配置。在实际写代码前,先把这几个参数理清楚,比盲猜要高效得多。

千万不要想当然认为所有设备都默认9600-8N1。我在一个项目中连续三天调不通通信,就是因为对方上位机配置里的“默认设置”其实是从EEPROM读出的旧参数。建议每次重新上电后,都主动发一条配置帧确认一下。

好了,串口基础就讲到这里。记住这四个核心参数(波特率、数据位、停止位、校验位)和两种物理层标准,后面写代码时就心里有底了。