2、RS232标准:电气特性、DB9接口与TTL电平的区别
RS232这个标准,说实话,年纪比我还大。但直到今天,工业现场、老旧设备、调试口上,你依然会频繁跟它打交道。我刚开始做嵌入式时,就因为它跟TTL电平没分清,烧过一块板子的串口芯片。嗯,从那以后,我再也不敢小看这个“老古董”了。
2.1 RS232的电气特性:为什么是±12V?
你可能会问:为什么RS232要用±12V这么高的电压?直接用3.3V或者5V不香吗?
原因其实很简单:抗干扰。RS232诞生在上世纪60年代,那时候工业环境里的电磁干扰非常严重。±12V的摆幅,让信号在长线传输时能扛住噪声。说白了,就是用高电压换可靠性。
RS232电气特性核心参数:
- 逻辑“1”(MARK): -3V ~ -15V(通常为-12V)
- 逻辑“0”(SPACE): +3V ~ +15V(通常为+12V)
- 无信号/空闲: 保持逻辑“1”(负电压)
- 最大传输距离: 约15米(标准线缆下)
- 最大速率: 约115200 bps(实际受线缆长度影响)
这里有个容易搞混的点:RS232的逻辑电平是反的。TTL里高电平是1,低电平是0。但RS232里,负电压(-12V)才是1,正电压(+12V)是0。我第一次用逻辑分析仪抓RS232波形时,看到反相的数据愣了半天。
我个人习惯: 调试RS232设备时,先用万用表量一下DB9的3脚(TX)对地电压。如果空闲时测到-8V到-12V,说明接口在正常工作。如果测到0V或正电压,大概率是芯片烧了或者没配置对。
2.2 DB9接口定义:别被9个引脚吓到
DB9接口看起来有9个引脚,但实际通信只需要3根线。其他引脚是握手信号,很多场合用不上。
| 引脚号 | 信号名称 | 方向(DTE视角) | 说明 |
|---|---|---|---|
| 1 | DCD | 输入 | 载波检测(很少用) |
| 2 | RXD | 输入 | 接收数据(必须) |
| 3 | TXD | 输出 | 发送数据(必须) |
| 4 | DTR | 输出 | 数据终端就绪 |
| 5 | GND | — | 信号地(必须) |
| 6 | DSR | 输入 | 数据设备就绪 |
| 7 | RTS | 输出 | 请求发送 |
| 8 | CTS | 输入 | 允许发送 |
| 9 | RI | 输入 | 振铃指示(极少用) |
实际项目中,90%的场景只需要接2(RXD)、3(TXD)、5(GND)三根线。我曾经调试一个老款PLC,对方工程师坚持要接全9根线,结果折腾了半天发现是RTS/CTS握手配置错了。从那以后,我调试RS232设备,一律先试三线制。
注意: DB9接口分公头和母头。PC端通常是公头(针脚),设备端通常是母头(孔位)。2和3的收发方向在公母头之间是交叉的。自己做线时,一定要确认是直连还是交叉(Null Modem)。
2.3 RS232与TTL电平的区别:不只是电压不同
很多初学者会把RS232和TTL串口混为一谈。其实它们除了电压不同,还有几个关键差异。
| 对比项 | TTL电平 | RS232电平 |
|---|---|---|
| 逻辑“1”电压 | 2.0V ~ 5.5V | -3V ~ -15V |
| 逻辑“0”电压 | 0V ~ 0.8V | +3V ~ +15V |
| 电平极性 | 正逻辑(高=1) | 负逻辑(负=1) |
| 驱动能力 | 弱(几毫安) | 强(可驱动长线) |
| 抗干扰 | 差 | 好 |
| 典型芯片 | MCU直接输出 | MAX232、SP3232 |
为什么不能直接连?你想想看,MCU的TX引脚输出3.3V,如果直接接到RS232设备的RX引脚上,对方会认为这是逻辑“0”。但RS232设备空闲时应该保持逻辑“1”(负电压),这一下就把通信搞乱了。反过来,RS232设备输出的-12V接到MCU引脚上,直接烧毁IO口。
避坑指南: 我曾经接手过一个项目,前任工程师用三极管搭了个简易电平转换电路,结果通信时好时坏。后来发现是RS232的负电压把三极管基极击穿了。老老实实用MAX232或者SP3232这类专用芯片,别自己折腾分立元件方案。
2.4 电平转换芯片:MAX232家族
MAX232是RS232电平转换的经典芯片。它内部有电荷泵,能把5V电源升压到±12V左右。现在常用的替代型号有SP3232、MAX3232等,支持3.3V供电。
典型电路连接:
MCU (3.3V) MAX3232 DB9 (RS232)
TX ----> T1IN T1OUT ----> RX (Pin 2)
RX <---- T1OUT T1IN <---- TX (Pin 3)
GND ----> GND GND ----> GND (Pin 5)
这里要注意:MAX3232的T1IN和R1OUT是TTL侧,T1OUT和R1IN是RS232侧。别接反了,我见过有人把TTL侧的信号直接连到DB9上,结果通信失败还找不到原因。
调试小技巧: 用逻辑分析仪抓RS232波形时,探头要接在MAX232的RS232侧(T1OUT和R1IN)。如果接在TTL侧,你看到的波形是反相的,而且电压不对。我习惯在DB9接口的焊盘上直接夹探头,这样最准确。
2.5 RS232电平转换与多机通信知识结构
下面这张图帮你理清RS232电平转换在整个串口通信中的位置:
从这张图可以看出,RS232电平转换的核心就是:把MCU的TTL信号,通过专用芯片转换成RS232电平,再通过DB9接口输出。反过来也一样。整个链路中,任何一个环节出问题,通信都会失败。
总结一下:
- RS232用±12V,TTL用3.3V/5V,两者不能直连
- DB9接口只需要2、3、5三根线就能通信
- 电平转换芯片(MAX232家族)是必备的桥梁
- 调试时先量空闲电压,再抓波形,别盲目怀疑代码
嗯,这一章的内容就到这里。记住这些基础,后面我们用逻辑分析仪抓包时,你就能一眼看出波形对不对了。