2、UART硬件接口:RS-232电平标准、TTL电平标准、DB9接口定义、USB转串口原理
做嵌入式通信,第一关就是搞懂硬件接口。很多人调不通UART,其实不是代码写错了,而是电平没配对。我见过不少新手,拿着TTL电平的模块直接往RS-232的DB9口上怼,结果要么没反应,要么冒烟。嗯,咱们先把这层窗户纸捅破。
2.1 电平标准:TTL vs RS-232
说白了,UART通信的核心就是两根线——TX和RX。但同样的数据,在不同设备上,电压范围完全不一样。这就是电平标准。
| 参数 | TTL电平(3.3V/5V) | RS-232电平(±12V) |
|---|---|---|
| 逻辑1(高电平) | 2.0V ~ VCC | -3V ~ -15V |
| 逻辑0(低电平) | 0V ~ 0.8V | +3V ~ +15V |
| 电压摆幅 | 小(3.3V或5V) | 大(约±12V) |
| 抗干扰能力 | 弱 | 强 |
| 传输距离 | <1.5米 | 可达15米 |
| 常见设备 | 单片机、传感器、开发板 | 工控机、PLC、老式PC串口 |
你想想看,TTL电平的逻辑1是3.3V或5V,逻辑0是0V。而RS-232正好反过来——逻辑1是负电压(-3V到-15V),逻辑0是正电压(+3V到+15V)。这就是为什么不能直接连。我在项目中遇到过,有人用杜邦线把STM32的TX直接接到工控机的DB9上,结果STM32的IO口直接烧了。教训就是:电平转换芯片不能省。
2.2 DB9接口定义
DB9是RS-232最常用的物理接口。9个引脚,但实际UART通信只用其中3根:TX、RX、GND。其他引脚用于硬件流控(RTS/CTS)和调制解调器控制(DTR/DSR等)。
我个人习惯,在调试时只接3根线:
- 引脚2:RX(接收数据)
- 引脚3:TX(发送数据)
- 引脚5:GND(信号地)
注意:DB9的引脚定义分公头和母头。公头的引脚2是TX,母头的引脚2是RX。连线时要交叉——公头的TX接母头的RX,公头的RX接母头的TX。这就是所谓的交叉线。
2.3 USB转串口原理
现在的电脑基本没有原生串口了。怎么办?用USB转串口芯片。市面上常见的有:
- FT232(FTDI):稳定,驱动好,价格稍贵
- CH340(南京沁恒):便宜,国产,够用
- CP2102(Silicon Labs):体积小,性能不错
- PL2303(Prolific):老牌,但假货多
这些芯片的原理都一样:USB协议 ↔ UART协议。电脑通过USB发送数据包,芯片解析后转成UART的TX/RX信号。反过来,UART收到的数据被芯片打包成USB包,发给电脑。
我曾经用CH340做过一个批量烧录器,一次接8个模块。刚开始总是丢包,后来发现是USB的供电不足。每个CH340在通信时大约需要100mA,8个就是800mA,USB口根本扛不住。解决办法是外接5V供电。
2.4 知识结构图:UART硬件接口体系
下面这张图把本章的核心知识点串起来了。你可以看到从电平标准到物理接口,再到USB转串口的完整链路。
2.5 实战避坑指南
最后,分享几个我踩过的坑:
- 共地问题:两个设备通信,GND必须连在一起。不共地,信号参考点不同,数据全是乱码。我曾经调试一个无线模块,折腾了两天,最后发现是GND没接。
- 电平匹配:3.3V设备接5V设备,需要确认IO口是否容忍5V。很多STM32的IO口是5V容忍的,但有些芯片不行。不确认就接,烧了别怪我。
- USB转串口供电:有些USB转串口线只能提供500mA电流。如果你外接的模块功耗大,建议用独立电源。
- DB9公母头:买线之前先确认你的设备是公头还是母头。公头插母头,母头插公头。两个公头怼不上,两个母头也怼不上。