2. UART硬件引脚与电气特性:TX/RX引脚定义、逻辑电平标准(TTL/RS-232/RS-485)、波特率发生器原理
好,咱们直接进入正题。UART通信,说白了就是两根线的事——TX和RX。但别小看这两根线,我见过太多工程师在这上面栽跟头。今天咱们就把引脚定义、电平标准、还有波特率发生器这几个硬骨头啃下来。
2.1 TX/RX引脚定义与连接规则
UART是异步串行通信,没有时钟线。数据靠两根信号线传输:
- TX (Transmit):发送端。数据从这里发出去。
- RX (Receive):接收端。数据从这里收进来。
连接规则很简单:TX接RX,RX接TX。也就是交叉连接。我刚开始做项目时,有次板子调不通,查了半天发现是TX接TX、RX接RX了——嗯,这种低级错误,犯过一次就记住了。
另外,UART是全双工的,也就是说发送和接收可以同时进行。这在多机通信中非常有用,后面我们会详细讲。
2.2 逻辑电平标准:TTL vs RS-232 vs RS-485
同样是UART,电平标准却有好几种。选错了,通信直接废掉。我整理了一个对比表,方便你快速查阅:
| 特性 | TTL (3.3V/5V) | RS-232 | RS-485 |
|---|---|---|---|
| 逻辑1 (高电平) | 2.0V ~ VCC | -3V ~ -15V | A-B > +200mV |
| 逻辑0 (低电平) | 0V ~ 0.8V | +3V ~ +15V | A-B < -200mV |
| 电压摆幅 | 0 ~ 3.3V/5V | ±12V 典型 | 差分 ±2V ~ ±6V |
| 传输距离 | <1米 | <15米 | <1200米 |
| 抗干扰能力 | 弱 | 中等 | 强(差分) |
| 多机通信 | 不支持 | 点对点 | 支持(最多256节点) |
| 典型应用 | 板级调试、传感器 | 工控机、老式设备 | 工业总线、远距离 |
2.2.1 TTL电平——最常用,但最脆弱
TTL电平是单片机、SoC内部直接使用的标准。3.3V或5V代表逻辑1,0V代表逻辑0。优点是简单,缺点是距离短、抗干扰差。
我曾经在一个电机控制项目里,直接用TTL电平走了一米多的线。结果电机一启动,数据全乱码。后来加了RS-485转换,问题立刻解决。所以,板内通信用TTL,板间通信一定要转成差分。
2.2.2 RS-232——老当益壮,但已过时
RS-232用±12V表示逻辑电平,抗干扰比TTL好一些。但它是单端传输,距离和速率都有限。现在新项目很少用了,除非是跟老设备对接。
注意:RS-232的逻辑电平是反相的。TTL的1对应RS-232的-12V,TTL的0对应RS-232的+12V。所以必须用MAX232这类芯片做电平转换。
2.2.3 RS-485——工业通信的王者
RS-485是差分信号,用两根线(A和B)的电压差表示逻辑。抗干扰能力极强,距离可达1200米,还支持多机通信。我做的绝大多数工业项目,底层通信都是RS-485。
2.3 波特率发生器原理
波特率(Baud Rate)就是每秒传输的符号数。对于UART来说,一个符号就是一个bit,所以波特率等于比特率。常见的有9600、115200、921600等。
波特率是怎么产生的?说白了,就是用一个计数器对系统时钟分频。公式如下:
波特率 = 系统时钟频率 / (16 × 分频系数)
// 例如:系统时钟 16MHz,目标波特率 115200
// 分频系数 = 16MHz / (16 × 115200) ≈ 8.68
// 取整后,实际波特率 = 16MHz / (16 × 8) = 125000
// 误差 = (125000 - 115200) / 115200 ≈ 8.5%
看到没?分频系数取整会带来误差。误差超过2%,通信就可能不稳定。我遇到过一块板子,晶振是11.0592MHz,算出来的分频系数刚好是整数,波特率完全无误差。而另一块板子用12MHz晶振,误差就大一些。所以,选晶振时最好选能整除的。
2.4 知识结构图:UART硬件与电气特性
下面这张图把本章的核心知识点串起来了。你可以把它当作调试时的快速参考:
2.5 调试实战:如何快速定位硬件问题
根据我的经验,UART硬件问题有80%集中在以下三个方面:
- 接线错误:TX/RX没交叉,或者地线没共地。用万用表量一下通断就能发现。
- 电平不匹配:TTL设备接了RS-232,或者3.3V设备接了5V。用示波器看波形幅度,一眼就能判断。
- 波特率误差:两边晶振不同,或者分频系数取整误差太大。用逻辑分析仪抓一下起始位宽度,算算实际波特率。
嗯,这一章的内容就到这里。硬件基础打牢了,后面讲数据帧格式和多机通信协议时,你才能游刃有余。