1. STM32串口通信基础与波特率核心概念
串口通信作为嵌入式系统中最基础也最常用的外设接口之一,其稳定性和准确性直接关系到整个系统的通信质量。在STM32系列单片机中,USART(Universal Synchronous/Asynchronous Receiver/Transmitter)模块提供了灵活的串行通信功能。而波特率作为串口通信的"心跳",决定了数据传输的速率和时序精度。
波特率(Baud Rate)是指每秒传输的符号数,在二进制系统中等同于比特率(bps)。例如9600波特率表示每秒传输9600个二进制位。STM32的USART模块通过精确的时钟分频来实现各种标准和非标准波特率的配置,其核心公式为:
code复制波特率 = 外设时钟频率 / (16 × USARTDIV)
这里的USARTDIV是一个浮点型的分频系数,由USART_BRR(Baud Rate Register)寄存器的值决定。理解这个公式的物理意义非常重要:外设时钟经过16倍过采样后,再通过USARTDIV分频得到最终的波特率时钟。这种设计既保证了抗干扰能力(通过过采样),又提供了精细的频率调节能力。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. USART_BRR寄存器深度解析
2.1 寄存器结构剖析
USART_BRR寄存器是一个16位寄存器,分为两部分控制USARTDIV值:
- DIV_Mantissa[15:4]:分频系数的整数部分(12位)
- DIV_Fraction[3:0]:分频系数的小数部分(4位)
这种设计使得USARTDIV可以表示为:
code复制USARTDIV = DIV_Mantissa + (DIV_Fraction / 16)
举个例子,当BRR寄存器值为0x1A3时:
- DIV_Mantissa = 0x1A (26)
- DIV_Fraction = 0x3 (3)
- USARTDIV = 26 + 3/16 = 26.1875
2.2 波特率计算实例演示
假设我们使用STM32F103系列芯片,APB2总线上的USART1时钟为72MHz,需要配置为115200波特率:
- 计算理论USARTDIV值:
code复制USARTDIV = 72000000 / (16 × 115200) ≈
