RS232 硬件实战:从 DB9 到线缆制作与故障排查
各位同学,咱们今天聊点实在的。RS232 的硬件部分,说白了就是怎么把芯片的 UART 信号,变成能在 DB9 接口上跑起来的物理电平。我见过不少工程师,软件协议栈写得飞起,结果一接上示波器,波形根本不对——问题就出在硬件这几根线上。
这一节,咱们把 DB9 接口定义、直连/交叉线缆怎么焊、硬件流控到底用不用、以及常见的坑,一次性讲透。
DB9 接口定义:别搞错 TX 和 RX
DB9 是 RS232 最常用的物理接口。你拿到的工控机、老式交换机、串口服务器,基本都是这个 9 针 D-Sub 接头。但要注意,DB9 分公头和母头,引脚定义是固定的。
| 引脚编号 | 信号名称 | 方向 | 说明 |
|---|---|---|---|
| 1 | DCD | 输入 | 载波检测(Modem 用) |
| 2 | RXD | 输入 | 接收数据 |
| 3 | TXD | 输出 | 发送数据 |
| 4 | DTR | 输出 | 数据终端就绪 |
| 5 | GND | — | 信号地 |
| 6 | DSR | 输入 | 数据设备就绪 |
| 7 | RTS | 输出 | 请求发送 |
| 8 | CTS | 输入 | 允许发送 |
| 9 | RI | 输入 | 振铃指示 |
这里有个容易混淆的点:公头(插针)和母头(插孔)的引脚编号是镜像的。你拿公头对着自己,从左到右数,和母头对着自己数,顺序完全相反。我刚开始做项目时,就因为这个焊反过一根线,排查了整整一下午。
直连线 vs 交叉线:什么时候用哪种?
这是 RS232 硬件里最经典的坑。简单说:
- 直连线(Straight-through):2 对 2,3 对 3,5 对 5。用于 DTE(电脑)连 DCE(Modem)。
- 交叉线(Null Modem):2 对 3,3 对 2,5 对 5。用于两台 DTE 设备直连(电脑连电脑,或者电脑连串口设备)。
为什么会有这个区别?因为 RS232 标准里,DTE 的 TXD 是输出,RXD 是输入;DCE 正好相反。你想想看,两台电脑都是 DTE,如果直连,TX 对 TX,RX 对 RX,谁发谁收?
实际项目中,我建议你记住一个原则:不确定的时候,先做一根交叉线。因为大部分串口设备(PLC、传感器、串口服务器)都把自己模拟成 DTE,交叉线通吃的概率更高。
直连线:DB9(公) 2→DB9(母) 2,3→3,5→5
交叉线:DB9(公) 2→DB9(母) 3,3→2,5→5
注意:如果两端都是公头或都是母头,需要加一个转接头。
硬件流控 RTS/CTS:到底要不要用?
RTS(请求发送)和 CTS(允许发送)是 RS232 的硬件流控信号。它的作用是:发送方先拉高 RTS,接收方准备好后拉高 CTS,发送方看到 CTS 有效才开始发数据。
听起来很美好,对吧?但实际项目中,我很少用硬件流控。原因有三:
- 线缆多两根:本来 3 根线(TX、RX、GND)就能通,加上 RTS/CTS 就得 5 根,焊接和布线都麻烦。
- 兼容性差:很多 USB 转串口模块的 RTS/CTS 信号处理不规范,有的干脆没接。
- 软件能搞定:大部分场景下,用 XON/XOFF 软件流控,或者干脆把波特率降一降,缓冲区开大一点,根本不需要硬件流控。
那什么时候必须用?我遇到过一种情况:高速率(115200 以上)且接收端处理不过来。比如你用一个 8 位单片机收数据,CPU 还要跑其他任务,软件流控的延迟可能丢数据。这时候硬件流控就派上用场了。
常见硬件故障排查:三板斧
串口不通,90% 是硬件问题。别急着调软件,先按这个顺序查:
- 第一板斧:量电压。用万用表测 TX 和 GND 之间的电压。空闲时应该是 -5V 到 -15V(RS232 电平)。如果是 0V 或者 +3.3V,说明电平转换芯片没工作,或者线断了。
- 第二板斧:看波形。用示波器看 TX 脚在发送数据时有没有跳变。我习惯把示波器时基调到 1ms/div,触发设成下降沿。如果看到一串正负 12V 的脉冲,说明物理层没问题。
- 第三板斧:环回测试。把 TX 和 RX 短接,用串口助手发数据,看能不能收到自己发的。能收到,说明串口芯片和线缆都正常;收不到,问题就在线缆或接口上。
本章知识结构图
下面这张图,把 RS232 硬件实战的核心逻辑串起来了。从 DB9 引脚定义,到线缆类型选择,再到流控决策和故障排查路径,一目了然。
这张图把咱们今天讲的内容串起来了。你从 DB9 引脚出发,根据设备类型选线缆,根据速率和接收能力决定是否用流控,最后用三板斧排查故障。记住这个流程,RS232 硬件这块基本不会出大问题。