2. 波特率概念:波特率与比特率区别、常用波特率标准、波特率发生器原理

波特率是UART通信中最核心的时序参数,它决定了数据在串行链路上的传输速度。理解波特率与比特率的区别、掌握常用标准值以及波特率发生器的内部工作原理,是后续进行波特率误差校准和DMA环形缓冲设计的基础。

2.1 波特率 vs 比特率:概念辨析

在串行通信中,波特率(Baud Rate)和比特率(Bit Rate)经常被混用,但二者有本质区别:

对比项 波特率(Baud Rate) 比特率(Bit Rate)
定义 每秒传输的符号(Symbol)个数 每秒传输的比特(bit)个数
单位 Baud(波特) bps(bits per second)
关系 波特率 = 比特率 / 每个符号携带的比特数 比特率 = 波特率 × 每个符号携带的比特数
UART场景 UART使用NRZ编码,1个符号=1个比特,因此波特率=比特率 与波特率数值相等(仅限UART)
典型误区 误以为波特率总是等于比特率 在多电平调制(如QAM)中,比特率远大于波特率
调试要点:在UART驱动调试中,波特率和比特率数值相同,但概念上必须区分。当你在示波器上测量一个UART帧的位宽时,你测量的是波特率对应的符号周期;而计算数据吞吐量时,使用的是比特率。
波特率 vs 比特率:UART场景下的概念对比 波特率(Baud Rate) 每秒传输的符号数 UART中:1符号 = 1比特 比特率(Bit Rate) 每秒传输的比特数 UART中:数值 = 波特率 UART场景:比特率 = 波特率 × 1(每个符号1比特) ∴ 数值相等,但物理含义不同 对比:QAM调制中,1个符号可携带4~10比特,此时波特率 < 比特率 UART使用NRZ编码,不存在此情况,但概念必须清晰

2.2 常用波特率标准

UART通信中,波特率并非任意值,而是遵循一系列国际标准。这些标准值大多源自早期电传打字机和调制解调器的时钟分频体系。以下是嵌入式开发中最常用的波特率标准:

波特率(bps) 位周期(μs) 典型应用场景 误差容忍度
9600 104.17 调试串口、低功耗传感器、GPS模块 ±2.5%
19200 52.08 工业控制、Modbus RTU ±2.0%
38400 26.04 蓝牙模块、短距离无线通信 ±1.5%
57600 17.36 高速传感器、数据采集 ±1.5%
115200 8.68 标准调试串口、Wi-Fi模块、日志输出 ±1.0%
230400 4.34 高速数据传输、固件升级 ±1.0%
460800 2.17 高性能嵌入式、FPGA调试 ±0.5%
921600 1.09 极限调试、高速日志 ±0.5%
工程经验:115200 bps 是嵌入式调试中最通用的“黄金波特率”。它兼顾了速度和稳定性,大多数MCU在8~16 MHz主频下都能通过整数分频精确产生115200,误差通常在0.16%以内,远低于±1.0%的容忍度。
常用波特率标准与位周期关系 9600 19200 38400 57600 115200 230400 460800 104μs 52μs 26μs 17μs 8.7μs 4.3μs 2.2μs 波特率越高,位周期越短,对时钟精度要求越高

2.3 波特率发生器原理

波特率发生器(Baud Rate Generator)是UART外设内部的一个专用分频器,其核心任务是将系统时钟(或外设时钟)分频为精确的波特率时钟。理解其原理是进行误差校准的前提。

2.3.1 基本分频公式

大多数MCU的UART波特率发生器采用以下通用公式:

波特率 = 时钟源频率 / (分频系数 × 过采样率)

其中:
- 时钟源频率:系统时钟或外设时钟(如APB时钟)
- 分频系数:16位或32位可编程分频器(USARTDIV)
- 过采样率:通常为16(标准模式)或8(高速模式)

以STM32的USART为例,标准模式(过采样率=16)下的计算公式为:

USARTDIV = 时钟频率 / (16 × 目标波特率)

示例:
- 时钟频率 = 72 MHz
- 目标波特率 = 115200
- USARTDIV = 72000000 / (16 × 115200) = 39.0625
- 整数部分 = 39,小数部分 = 0.0625 × 16 = 1
- 实际波特率 = 72000000 / (16 × (39 + 1/16)) = 72000000 / 625 = 115200 ✓
误差陷阱:当USARTDIV计算结果不是整数或半整数时,分频器只能取近似值,导致实际波特率与目标值存在偏差。例如,时钟频率为16 MHz,目标波特率为115200时,USARTDIV = 16000000 / (16 × 115200) ≈ 8.6806,取整后实际波特率偏差可达0.16%。多个设备级联时,误差会累积。

2.3.2 波特率发生器内部架构

一个典型的UART波特率发生器包含以下关键模块:

  • 时钟预分频器:对系统时钟进行粗分频,降低后续分频器的负担。
  • 整数分频器:通过16位计数器实现整数倍分频,产生基础波特率时钟。
  • 小数分频器(可选):通过分数分频技术(如FRAC分频)实现更精确的波特率,常见于高端MCU。
  • 过采样时钟生成:将分频后的时钟乘以过采样率(×16或×8),用于位采样。
  • 发送/接收时钟分频:进一步分频产生发送移位时钟和接收采样时钟。
UART波特率发生器内部架构 系统时钟 HCLK / APB 预分频器 粗分频 ÷1/2/4/8 整数分频器 16位计数器 USARTDIV整数部分 ÷N (N=1~65535) 小数分频器 FRAC分频 USARTDIV小数部分 ÷0.0625步进 时钟 过采样时钟生成 ×16(标准)或 ×8(高速) 发送时钟分频 TX移位时钟 接收时钟分频 RX采样时钟 小数分频器(FRAC)可显著降低波特率误差,是高速UART通信的关键技术 例如:STM32G4系列支持1/16步进的小数分频,误差可控制在0.03%以内

2.3.3 波特率误差计算

波特率误差是驱动调试中必须量化的指标。误差计算公式如下:

误差(%) = |(实际波特率 - 目标波特率) / 目标波特率| × 100%

实际波特率 = 时钟频率 / (过采样率 × USARTDIV)

其中USARTDIV = 整数部分 + 小数部分 / 16(以1/16步进为例)

误差容忍度取决于通信双方的总累积误差。通常要求:

  • 单端误差:每侧误差 < ±1.5%(标准模式)
  • 总累积误差:发送方误差 + 接收方误差 < ±2.5%
  • 高速模式(过采样率=8):误差容忍度更严格,需 < ±1.0%
调试技巧:在初始化UART时,建议通过软件计算实际波特率并与目标值对比。如果误差超过±1.0%,应考虑调整时钟源频率(如使用PLL输出非标准频率)或启用小数分频功能。后续章节将详细讲解如何通过示波器测量和软件校准来消除误差。

2.4 本章小结

  • 波特率 vs 比特率:UART场景下数值相等,但概念不同——波特率是符号率,比特率是数据率。
  • 常用标准:9600/19200/38400/57600/115200/230400/460800/921600,其中115200是调试黄金标准。
  • 发生器原理:通过预分频器、整数分频器、小数分频器和过采样时钟生成,将系统时钟精确分频为目标波特率。
  • 误差控制:单端误差需 < ±1.5%,总累积误差需 < ±2.5%,高速模式要求更严格。