2. 硬件接口与电平标准:UART引脚定义、RS232与TTL电平、MAX232芯片

做UART驱动开发,第一件事不是写代码,而是先搞清楚硬件怎么接的。我见过不少新手,代码写得挺顺,结果一上板子,通信就是乱码。查了半天,原来是TX和RX接反了,或者电平不匹配把芯片烧了。嗯,咱们先把这些坑填上。

2.1 UART引脚定义:TX、RX、GND

UART通信最少需要三根线:TX(发送)、RX(接收)、GND(地)。说白了,就是两个人打电话,一个人说,一个人听,还得共用一个“地线”作为参考点。

核心原则:交叉连接

设备A的TX → 设备B的RX
设备A的RX ← 设备B的TX
设备A的GND — 设备B的GND

我在项目中遇到过好几次,学生拿着杜邦线,把两个设备的TX-TX、RX-RX直接连起来。结果呢?两边都在说话,谁也听不见谁。记住,UART是全双工,但必须交叉。

引脚 方向 说明
TX 输出 本设备发送数据
RX 输入 本设备接收数据
GND 公共 信号地,必须共地

警告:GND不接,通信一定失败。我曾经调试一块板子,怎么都收不到数据,折腾了两小时,最后发现GND线松了。共地是UART通信的命根子。

2.2 RS232电平与TTL电平的区别

你想想看,单片机引脚输出的电压,和电脑串口输出的电压,根本不是一回事。这就是电平标准的问题。

TTL电平:单片机用的。逻辑1是2.4V~5V,逻辑0是0V~0.5V。说白了,5V单片机就是5V代表1,0V代表0。

RS232电平:老式电脑串口用的。逻辑1是-3V~-15V,逻辑0是+3V~+15V。你没看错,它是负逻辑,而且电压范围大得多。

参数 TTL电平 RS232电平
逻辑1 2.4V ~ 5V -3V ~ -15V
逻辑0 0V ~ 0.5V +3V ~ +15V
电压摆幅 约5V 约12V
传输距离 1~2米 15米以上
抗干扰 弱 强

为什么RS232要用这么高的电压?说白了就是为了抗干扰。工业现场电磁环境复杂,±12V的信号比5V信号扛得住噪声。但代价是,不能直接连单片机。

经验之谈:我早期做项目时,直接把单片机TX接到电脑串口上,结果单片机瞬间冒烟。RS232的±12V灌进5V的IO口,不烧才怪。反过来,电脑串口收到5V信号,也识别不了。所以必须用电平转换芯片。

2.3 常用电平转换芯片:MAX232

MAX232是TI(德州仪器)的经典芯片,专门做TTL到RS232的电平转换。它内部有电荷泵,能把5V升到±12V左右。

我习惯用MAX232A,它只需要4个0.1μF的电容就能工作。老版本的MAX232需要1μF电容,体积大一些。

// MAX232典型接线(伪代码描述)
// 单片机侧:TTL电平
// MAX232引脚11(T1IN) ← 单片机TX
// MAX232引脚12(R1OUT) → 单片机RX

// DB9串口侧:RS232电平
// MAX232引脚14(T1OUT) → DB9引脚2(RXD)
// MAX232引脚13(R1IN)  ← DB9引脚3(TXD)

// 电容:C1~C4 = 0.1μF,接VCC=+5V,GND共地

MAX232内部结构要点:

  • 电荷泵:把5V升到+10V和-10V
  • 发送器:TTL输入 → RS232输出
  • 接收器:RS232输入 → TTL输出
  • 支持两路收发(MAX232有2路)

你可能会问,现在电脑都没串口了,还用MAX232干嘛?其实很多工业设备、PLC、老式仪器还在用RS232。而且USB转串口模块里,很多也集成了类似MAX232的电平转换电路。

避坑指南:我曾经买过一批便宜的MAX232,结果发现是假货。电荷泵输出电压不够,通信距离超过3米就丢数据。建议从正规渠道采购,或者用MAX3232(3.3V版本)做替代。

2.4 知识结构图:UART硬件接口与电平转换

下面这张图把整个硬件链路串起来了。从单片机到RS232设备,中间经过MAX232,每一步的电平变化都标清楚了。

UART硬件接口与电平转换链路 单片机 TTL电平 (0~5V) TX RX MAX232 电平转换芯片 TTL ↔ RS232 电荷泵 5V→±12V T1OUT R1IN DB9串口 RS232电平 (±12V) 关键说明 1. 单片机TX → MAX232的T1IN → T1OUT → DB9的RXD(引脚2) 2. DB9的TXD(引脚3)→ MAX232的R1IN → R1OUT → 单片机RX 3. GND必须全部共地,否则通信失败

2.5 实际项目中的电平选择建议

我个人习惯这样选:

  • 板级通信(同一块PCB):直接用TTL电平,省掉转换芯片
  • 短距离板间通信(1米内):TTL电平加屏蔽线,或者用MAX232转RS232
  • 长距离或工业环境:必须用RS232或RS485,MAX232是标配
  • 3.3V单片机:用MAX3232,它支持3.3V供电

小技巧:调试时可以用USB转TTL模块直接连单片机,省掉MAX232。但量产时一定要加电平转换,别省那几块钱。我见过为了省钱直连TTL,结果通信距离稍远就丢包,最后返工更贵。