什么是 UART?
UART(Universal Asynchronous Receiver-Transmitter,通用异步收发器)是一种广泛使用的串行通信协议,主要用于点对点的全双工或半双工数据传输。
- 异步通信:不需要共享时钟信号,而是通过设置一致的波特率来同步发送端和接收端。
- 全双工通信:数据可以同时在发送端(TX)和接收端(RX)传输。
UART 数据帧结构
UART 数据帧包含以下部分:
1.起始位 (Start Bit)
- 1个低电平信号,通知接收端准备接收数据
2.数据位 (Data Bits)
- 数据的有效部分,通常是 5-9 位(8 位最常见)
3.校验位 (Parity Bit,Optional)
- 用于检测数据传输过程中的错误,常见模式包括偶校验、奇校验和无校验
- 奇校验(Odd Parity)
奇校验是一种校验方法,它通过添加一个额外的位(称为校验位)到数据位序列中,使得整个数据位序列中1的数量变为奇数。如果原始数据中1的数量已经是奇数,则校验位为0;如果1的数量是偶数,则校验位为1,以保证总数为奇数。接收端会检查接收到的数据中的1的数量是否为奇数,如果不是,则认为数据传输过程中发生了错误。 - 偶校验(Even Parity)
偶校验与奇校验类似,但是目标不同。偶校验的目标是使数据位序列中1的数量成为偶数。因此,如果原始数据中1的数量已经是偶数,则校验位为0;如果是奇数,则校验位为1,以确保总数为偶数。接收端会检查接收到的数据中的1的数量是否为偶数,如果不是,则认为数据传输中出现了错误。 - 无校验(No Parity)
无校验位,此模式能接收到有奇偶校验位的数据。
4.停止位 (Stop Bit)
- 表示一帧数据的结束。常见长度为 1 位或 2 位高电平
数据帧示例
假设波特率为 9600bps,发送字符 ‘A’ 的 UART 数据帧(ASCII: 0x41)如下:
起始位 | 数据位(0x41) | 校验位(无) | 停止位 |
---|---|---|---|
0 | 01000001 | 无 | 1 |
每一个 bit 持续的时间由波特率(baud rate)决定,例如此处的波特率为 9600 bps,每 bit 时间为 1/9600 秒
TTL、RS-485 和 RS-232接口
1. TTL(Transistor-Transistor Logic)
- 电平定义:
– 逻辑 1:3.3V 或 5V(高电平)。
– 逻辑 0:0V(低电平)。 - 特点:
– 常用于单片机或嵌入式系统。
– 信号抗干扰能力较弱,不适合长距离通信。 - 应用场景:
– 单片机之间的数据通信(如 STM32 与模块之间的串口通信)。
2. RS-232
- 电平定义:
– 逻辑 1:-3V 至 -15V。
– 逻辑 0:+3V 至 +15V。 - 特点:
– 电平范围较宽,抗干扰能力比 TTL 高。
– 通信距离一般在 15 米内。
– 一根 TX、一根 RX 和一根 GND,即 3 根线即可通信。 - 应用场景:
– 常用于计算机的串口通信(早期的串口接口 COM1/COM2)。
3. RS-485
- 电平定义:
– 差分信号,通过一对差分线 (A、B) 传输。
– A-B > 200mV 表示逻辑 1,A-B < -200mV 表示逻辑 0。 - 特点:
– 支持多点通信(最大支持 32 个设备)。
– 抗干扰能力强,适合长距离传输(最高可达 1.2 公里)。
– 通信速率随距离增加而降低。 - 应用场景:
– 工业通信(如 Modbus-RTU 协议的底层传输)。
– 远程设备控制和监控。
UART 在 TTL、RS-232 和 RS-485 中的应用
UART 本质上是传输数据的协议,而 TTL、RS-232 和 RS-485 则定义了信号的电平标准。因此:
- TTL UART:直接使用 MCU 的 UART 引脚进行通信,适合短距离的模块对接。
- RS-232 UART:通过电平转换芯片(如 MAX232),实现 UART 信号到 RS-232 信号的转换,用于计算机与设备的通信。
- RS-485 UART:通过电平转换芯片(如 MAX485),将 UART 信号转换为 RS-485 差分信号,用于远距离多设备通信。
总结
- UART 是一种协议:通过异步方式实现点对点数据传输,结构简单。
- TTL、RS-232 和 RS-485 是不同的电平标准,适应不同的应用场景(短距离嵌入式通信、计算机串口、长距离工业通信)