Skip to content

UART

[ai, I get it]

  • NOTE

    • TTL 是 UART 的一种实现。[ai] 在实现UART通信时,可以使用不同的电气接口标准,如TTL、RS-232、RS-485等。这些标准定义了信号的电压范围和电气特性。

(1) 发送 0x55(二进制 01010101

字段 电平序列(TTL) 说明
起始位 0V(低电平) 持续 1 比特时间(≈104 μs @9600bps),表示帧开始。
数据 0x55 0V, 3.3V, 0V, 3.3V, 0V, 3.3V, 0V, 3.3V 从 LSB(最低位 1)到 MSB(最高位 0)依次发送。
停止位 3.3V(高电平) 持续 1 比特时间,表示帧结束。
空闲 3.3V(高电平) 持续任意时间(直到下一帧起始位)。

(2) 发送 0xAA(二进制 10101010

字段 电平序列(TTL) 说明
起始位 0V(低电平) 同上。
数据 0xAA 3.3V, 0V, 3.3V, 0V, 3.3V, 0V, 3.3V, 0V LSB(0)到 MSB(1)依次发送。
停止位 3.3V(高电平) 同上。
空闲 3.3V(高电平) 持续任意时间。

起始位下降沿的同步原理

注意:收发端波特率可能稍有不同,偏差最多 5% 左右。接收端并不会计算发送端的比特时间(即波特率).

(1) 检测下降沿(硬件触发)

  • 空闲状态:UART 总线在无数据传输时保持高电平(逻辑 1)。
  • 起始信号:发送端通过拉低电平(逻辑 0)表示帧开始,形成一个高→低的跳变(下降沿)
  • 接收端硬件:通过边沿检测电路(如施密特触发器)捕获下降沿,触发接收流程。

(2) 重新同步采样时钟

接收端在检测到下降沿后,会启动一个本地时钟计数器,按以下步骤同步: 1. 延迟至比特中点: - 从下降沿开始,等待 1.5 个比特时间(例如,波特率 9600 bps 时,1 比特 ≈ 104 μs,1.5 比特 ≈ 156 μs)。 - 此时采样点位于第一个数据位的中心位置(抗干扰最强)。 2. 后续比特的同步采样: - 之后每 1 个比特时间 采样一次,依次读取数据位、校验位和停止位。 - 采样时刻严格依赖初始下降沿的同步,而非全局时钟。

关键点:起始位的下降沿相当于一个“时间锚点”,后续所有比特的采样均以它为基准。

2. 硬件如何实现?以 16x 过采样为例

现代 UART 模块(如 STM32)通常采用过采样技术增强鲁棒性。以下是典型流程:

  1. 过采样频率

    • 接收端以 16 倍波特率 的时钟频率采样 RX 线(例如 9600 bps → 153.6 kHz)。
    • 每个比特周期内采样 16 次(编号 0~15)。
  2. 下降沿检测与确认

    • 连续检测到 3 个低电平采样点(如采样点 0、1、2)时,确认起始位有效(防噪声干扰)。
    • 记录下降沿的时刻(如采样点 0)。
  3. 同步采样点计算

    • 第一个数据位的采样点位于 第 8、9、10 次采样(对应比特时间的中心区域)。
    • 通过多数表决(取 3 次采样中的多数值)确定比特值。
  4. 后续比特采样

    • 每 16 个采样周期(即 1 比特时间)后,重复中心采样(如第 24、25、26 次采样对应第二个数据位)。