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了——嗯,这种低级错误,犯过一次就记住了。

经验之谈: 调试时先用万用表量一下TX引脚有没有电平跳变。如果有波形但通信失败,八成是接线或电平不匹配。

另外,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。

核心要点: 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晶振,误差就大一些。所以,选晶振时最好选能整除的。

避坑指南: 我曾经在一个项目中,发送端用16MHz晶振,接收端用12MHz晶振,波特率都是115200。结果通信时好时坏。一算误差,发送端误差8.5%,接收端误差0.16%,两边对不上。后来统一换成11.0592MHz晶振,问题解决。

2.4 知识结构图:UART硬件与电气特性

下面这张图把本章的核心知识点串起来了。你可以把它当作调试时的快速参考:

UART硬件与电气特性知识结构图 UART硬件与电气特性知识结构 UART硬件基础 TX / RX 引脚定义 TX → RX,RX → TX 交叉连接 全双工:可同时收发 逻辑电平标准 TTL:3.3V/5V,板内通信 RS-232:±12V,反相 RS-485:差分,远距离多机 波特率发生器 分频公式:CLK / (16 × 分频系数) 误差 < 2% 才稳定 调试口诀:先查接线,再对电平,最后算波特率误差 三者都对了,UART通信基本不会出问题

2.5 调试实战:如何快速定位硬件问题

根据我的经验,UART硬件问题有80%集中在以下三个方面:

  1. 接线错误:TX/RX没交叉,或者地线没共地。用万用表量一下通断就能发现。
  2. 电平不匹配:TTL设备接了RS-232,或者3.3V设备接了5V。用示波器看波形幅度,一眼就能判断。
  3. 波特率误差:两边晶振不同,或者分频系数取整误差太大。用逻辑分析仪抓一下起始位宽度,算算实际波特率。
我的调试流程: 先看TX引脚有没有波形 → 再量电平幅度对不对 → 最后用逻辑分析仪抓数据帧。三步走完,问题基本水落石出。

嗯,这一章的内容就到这里。硬件基础打牢了,后面讲数据帧格式和多机通信协议时,你才能游刃有余。