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,每一步的电平变化都标清楚了。
2.5 实际项目中的电平选择建议
我个人习惯这样选:
- 板级通信(同一块PCB):直接用TTL电平,省掉转换芯片
- 短距离板间通信(1米内):TTL电平加屏蔽线,或者用MAX232转RS232
- 长距离或工业环境:必须用RS232或RS485,MAX232是标配
- 3.3V单片机:用MAX3232,它支持3.3V供电
小技巧:调试时可以用USB转TTL模块直接连单片机,省掉MAX232。但量产时一定要加电平转换,别省那几块钱。我见过为了省钱直连TTL,结果通信距离稍远就丢包,最后返工更贵。