2、UART硬件接口与电气特性:TTL电平与RS232电平转换、MAX3232芯片应用、DB9接口定义、硬件流控(RTS/CTS)
做嵌入式通信,第一脚踩进去的坑,十有八九是电平匹配问题。
UART协议本身很简单,但它的物理层——也就是硬件接口和电气特性——才是真正决定通信能不能跑起来的关键。这一章,我们就把TTL、RS232、MAX3232、DB9和硬件流控这些硬骨头啃干净。
2.1 TTL电平与RS232电平:两个世界的电压标准
UART最早是给计算机和调制解调器用的,那时候的电压标准是RS232。后来嵌入式系统普及,芯片之间直接通信,才衍生出TTL电平的UART。
说白了,TTL和RS232就是两套电压“方言”。
| 特性 | TTL电平 (3.3V/5V) | RS232电平 (±12V) |
|---|---|---|
| 逻辑“1” | 2.0V ~ VCC (通常3.3V或5V) | -3V ~ -15V |
| 逻辑“0” | 0V ~ 0.8V | +3V ~ +15V |
| 电压摆幅 | 小 (3.3V或5V) | 大 (典型±12V) |
| 传输距离 | 短 (<1米,板级) | 长 (15米以上) |
| 抗干扰能力 | 弱 | 强 (差分/大摆幅) |
| 典型应用 | MCU与传感器、模块间通信 | 工控设备、老式PC串口 |
2.2 MAX3232芯片:电平转换的“翻译官”
那怎么让TTL和RS232对话?需要一个“翻译官”——电平转换芯片。MAX3232是其中最经典的一款。
它内部有电荷泵,能把3.3V或5V升压到±5.5V左右,满足RS232的电压要求。同时,它也能把RS232的±12V信号降压到TTL可接受的0~3.3V。
典型电路连接如下:
// MAX3232典型接线(以3.3V系统为例)
// MCU端 (TTL) MAX3232端 DB9端 (RS232)
// TXD (PA9) ——————→ T1IN (11脚) T1OUT (14脚) ——————→ DB9 Pin2 (RXD)
// RXD (PA10) ←—————— R1OUT (12脚) R1IN (13脚) ←—————— DB9 Pin3 (TXD)
// GND ——————→ GND (15脚) GND ——————→ DB9 Pin5 (GND)
//
// 电容连接:
// C1+ (1脚) —— 0.1μF —— C1- (3脚)
// C2+ (4脚) —— 0.1μF —— C2- (5脚)
// V+ (2脚) —— 0.1μF —— GND
// V- (6脚) —— 0.1μF —— GND
2.3 DB9接口定义:9根针,各司其职
DB9是RS232最常用的物理接口。虽然叫9针,但实际通信只需要3根:TX、RX、GND。剩下的针脚,要么是流控,要么是特殊用途。
| DB9 Pin | 名称 | 方向 (DTE视角) | 功能说明 |
|---|---|---|---|
| 1 | DCD | 输入 | 载波检测(很少用) |
| 2 | RXD | 输入 | 接收数据(核心) |
| 3 | TXD | 输出 | 发送数据(核心) |
| 4 | DTR | 输出 | 数据终端就绪 |
| 5 | GND | - | 信号地(核心) |
| 6 | DSR | 输入 | 数据设备就绪 |
| 7 | RTS | 输出 | 请求发送(硬件流控) |
| 8 | CTS | 输入 | 清除发送(硬件流控) |
| 9 | RI | 输入 | 振铃指示(很少用) |
2.4 硬件流控(RTS/CTS):让数据不再“撞车”
硬件流控,说白了就是让发送方和接收方互相打个招呼:“我准备好了,你发吧”或者“我忙不过来,你先等等”。
RTS (Request To Send) 和 CTS (Clear To Send) 就是干这个的。
- RTS:发送方告诉接收方:“我要发数据了,你准备好没?”
- CTS:接收方回应发送方:“好了,你发吧。”或者“不行,我缓冲区满了,等一下。”
为什么需要这个?你想想看,如果发送方一直发,接收方处理不过来,数据就会丢失。软件流控(XON/XOFF)也能解决,但硬件流控更可靠,不占用数据线。
- 高速通信(比如115200bps以上)
- 接收方处理速度慢(比如带操作系统的设备,任务调度有延迟)
- 长距离传输,干扰大,容易丢包
接线方式很简单:
// 硬件流控接线(交叉连接)
// 设备A 设备B
// RTS ————————————————→ CTS
// CTS ←———————————————— RTS
// GND —————————————————— GND
2.5 本章知识体系:一张图看懂
下面这张SVG图,把TTL、RS232、MAX3232、DB9和硬件流控的关系串起来了。你可以把它当作一个快速参考。
这张图把整个链路串起来了:MCU的TTL信号,经过MAX3232转换成RS232电平,再通过DB9接口连接到外部设备。硬件流控作为可选功能,通过RTS/CTS实现握手。记住这个流程,以后设计串口电路时,心里就有谱了。