STM32
直播中

李玲

7年用户 1251经验值
私信 关注
[问答]

STM32L476系统时钟72MHz,24分频后串口波特率为什么不是3M呢?

STM32L476,使用内部HSI-16M时钟,串口波特率设置为3Mhz,实际测量出来波特率只有2.86MHz。
看手册,常温下内部HSI时钟频偏只有正负1%,出来的串口波特率看已经偏了4.67%了,理论上不应该有这么大的偏差吧?是芯片内部坏了吗?


回帖(2)

赵明

2024-3-29 10:54:16
楼主您好,首先确认波特的配置不需要修改分频系数。只需要初始化的时候写入波特率即可。如果时钟频率降低,波特率的提高误差会增加。请仔细阅读串口波特率频率的介绍。
举报

李鸿

2024-3-29 14:29:55
在STM32L476芯片中,串口波特率的计算公式为:
波特率 = FCK / (8 * (2 - OVER8) * (USARTDIV + 1))
其中,FCK是串口时钟频率,OVER8位于USART_CR1寄存器中,用于设置串口采样分频系数,OVER8为0时分频系数为16,OVER8为1时分频系数为8。USARTDIV位于USART_BRR寄存器中,表示分频系数,计算公式为:
USARTDIV = 整数部分 + 小数部分
整数部分的计算公式为:
整数部分 = FCK / (波特率 * 16)
小数部分的计算公式为:
小数部分 = ((整数部分 - 整数部分的取整值) * 16) + 0.5

根据上述公式,计算得到波特率为3Mhz时的USARTDIV为4.5,但STM32L476芯片的USARTDIV寄存器的设置值是整数,不支持小数部分。因此,实际设置的USARTDIV值为4,对应的波特率为2.86MHz。所以,实际测量的波特率与理论值有些差距是正常的,不代表芯片内部出现问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分