
RS232 是设备间“传小数据”的常用接口,广泛用于单片机与电脑、传感器与控制器之间的通信。本文抛开复杂术语,用通俗语言讲清 RS232 的核心逻辑,从基础概念、协议规则、自定义优化到实操接线,一步步说透。
一、RS232 基础:概念与关系
1.1 串口、RS232、UART 的区别
- 串口是一个大类别,就像水果;RS232、RS485 是串口里的具体品种,就像苹果、橘子。
- UART 是串口的工作方式(异步通信),不用额外时钟线,靠约定规则传数据;如果加了时钟线,就叫 USRT(同步通信)。
- 平时说的 RS232 基本都是 UART 方式,所以常说 串口≈RS232≈UART。
1.2 RS232 的优缺点
| 项目 | 说明 |
|---|---|
| 优点 | 简单、便宜,单片机、ARM、电脑基本都带此接口,无需额外复杂电路。 |
| 缺点 | 抗干扰差、传输距离短。靠 TXD 与 GND 之间的电压传数据(如 +12V 代表 0,-12V 代表 1),一般最多 15 米。 |
| 电平转换 | 设备内部用 TTL 电平(0V 代表 0,5V 代表 1),与外部设备通信时需转成 RS232 电平,常用 MAX232 芯片。 |
二、RS232 通信规则:异步通信与帧结构
2.1 异步通信的四个要素
RS232 是异步通信,没有时钟线同步,接收方靠起始位、数据位、校验位、停止位来识别有效数据。每个字节都带着这四位一起传:
- 起始位:告诉接收方要开始传数据了,一般是 1 个低电平。
- 数据位:真正要传的内容,比如 8 位(1 个字节),如 0x66(二进制 01100110)。
- 校验位:简单检查数据错没错,如奇校验、偶校验。但查错能力粗糙,错了 2 个 bit 可能查不出来。
- 停止位:告诉接收方这个数据传完了,一般是 1 个或 2 个高电平。
2.2 常见问题与局限
- 校验位查错能力差,传错了不知道;
- 数据错了没法让对方重传;
- 总线上接多个设备时,主机分不清数据是哪个设备发的;
- 没传完停止位时,接收方会一直等,导致后续数据混乱。
解决办法是把数据“打包成帧”——一帧包含多个字节,每个字节带起始/停止位,再加额外功能段,解决上述问题。
三、自定义协议:给数据打包提升可靠性
3.1 自定义帧结构
自定义协议根据实际需求设计固定结构,常见字段如下:
| 字段 | 作用 | 示例 |
|---|---|---|
| 帧起始 | 标志一帧开始 | 0x55 或 0xaa |
| 命令域 | 定义数据用途 | 上行 0x1d,下行 0x3a,重传 0xb7,应答 0x89 |
| 地址域 | 设备唯一地址(可选) | 设备A 0x0a,设备B 0x0b |
| 长度域 | 说明数据域字节数(可选) | 长度固定时可省略 |
| 数据域 | 真正要传的业务数据 | 0x03+0xa0+0xb0+0xc0 |
| 校验域 | 校验数据正确性 | CRC16 占 2 字节 |
3.2 关键字段设计要点
- 帧起始选 0x55 或 0xaa:二进制 01010101 和 10101010,0 和 1 交替,接收方可识别波特率(如 9600bps、115200bps);用 0xff 全 1 时,外界干扰易误认为起始信号。
- 命令域:明确数据用途,如上行、下行、请求重传、应答。
- 地址域:给每个设备唯一地址,主机发数据带地址,只有对应设备接收;也可设为同一地址实现一对多通信。
- 长度域:数据长度可变时使用;固定长度可省略。
- 数据域:业务数据,常带数据个数,如 0x03 表示后跟 3 个数据。
- 校验域:比校验位可靠,常用 CRC16,除帧起始外其他字段都参与校验。
3.3 完整数据帧示例
要给地址 0x0a 的设备发一帧上行数据,包含 3 个数据 0xa0、0xb0、0xc0,完整帧为:
0x55(帧起始)+ 0x1d(命令域)+ 0x0a(地址域)+ 0x03(数据个数)+ 0xa0 + 0xb0 + 0xc0(数据域)+ 0x53 + 0xfb(CRC16 校验)
3.4 应答与重传机制
- 接收方校验数据没错,发一帧应答帧(如 0x55+0x89+校验值)。
- 如果数据有错,发一帧重传帧(如 0x55+0xb7+校验值),让对方重新发送。
四、实操接线:三根线搞定
4.1 核心接线方式
两个设备通过 RS232 通信,核心只需 3 根线:
- TXD(发送线):甲设备的 TXD 接乙设备的 RXD,不能接反,否则发不出数据。
- RXD(接收线):乙设备的 RXD 接甲设备的 TXD,与上面对应。
- GND(地线):必须连接!不共地会导致两设备识别的电压差异大,数据乱飘,如本该是 0 的数据变成 1。
4.2 注意事项
- 接线前确认 TXD 和 RXD 交叉连接;
- 地线绝不能省略,否则通信不稳定;
- 长距离通信需考虑电平转换和抗干扰措施。
五、总结与延伸
RS232 或其他通信协议,传数据基本都以字节为单位。例如传 12 位 ADC 数据(范围 0-4095),需拆成两个字节(高位补 0)再传。
从 RS232 到 USB、以太网,物理接口变化不大,但协议越来越复杂——说明光靠硬件层保证数据可靠不够,还需协议里的校验、重传等机制,才能让数据传得又准又稳。
本文参考了网上部分内容,侵权联删。