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帧的位宽时,你测量的是波特率对应的符号周期;而计算数据吞吐量时,使用的是比特率。
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%的容忍度。
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),用于位采样。
- 发送/接收时钟分频:进一步分频产生发送移位时钟和接收采样时钟。
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%,高速模式要求更严格。