前言
STM32中,USART控制器中的波特率寄存器是可以写入分频数(USARTDIV)小数部分的
因此能够更精准地得到我们想要的波特率。
波特率:每秒钟传输的二进制代码的位数
波特率寄存器
位说明
波特率计算公式:
其中OVER8通过串口控制寄存器1(USART_CR1第15位来配置
它就是用来设置过采样大小的,为了获得更确定的电平信息,一般采样16倍过采样。
等换公式:
波特率寄存器配置公式1:
思路:
以上USARTDIV的公式算出来的值是带有小数部分的,我们要想写入寄存器
就要将USARTDIV值对应的二进制整体左移四位,故十进制要扩大16倍
结合之前公式
波特率写入值 = Fck / 波特率 //此时是16倍过采样
波特率写入值 = Fck / 波特率 * 2 //此时是16倍过采样
如配置USART1的波特率为9600
代码
波特率寄存器配置公式2:
思路:
根据公式算出USARTDIV,取其整数部分,再算其小数部分
最后分别写入波特率寄存器BRR的对应整数部分和小数部分位中
官方也给出的公式
①USARTDIV = Fck / 8*(2 - OVER8) / 波特率
②DIV_M = (u32)USARTDIV
③DIV_F = (USARTDIV - DIV_M)*8*(2 - OVER8)
如配置USART1的波特率为9600
代码
总结:
其实其公式原理是一样的,算出DSARTDIV的值
将整数部分分别写入BRR 位 15:4 DIV_Mantissa[11:0]
将小数部分数分别写入BRR 位 3:0 DIV_Fraction[3:0]:
标签:公式,写入,M4,USARTDIV,寄存器,STM32F4,波特率,DIV From: https://blog.csdn.net/asd12342153/article/details/141437237