
题目中那个实际波特率哪来的哇,要根据div_fraction 怎么计算下能得到呢
关注引自免费微信小程序:皆我百晓生
在STM32中,USART(通用同步异步收发器)的波特率是通过配置寄存器中的USART_BRR(波特率寄存器)来设置的。USART_BRR寄存器包含两个部分:DIV_Mantissa(整数部分)和DIV_Fraction(小数部分),它们共同决定了实际的波特率。
根据题目描述,我们有以下信息:
首先,计算USARTDIV值(即DIV_Mantissa): [ USARTDIV = \frac{fPCLK2}{8 \times (2^{OVER8}) \times 波特率} = \frac{8 \text{ MHz}}{8 \times (2^0) \times 9600} = 52.083 ]
接着,将USARTDIV拆分为整数部分和小数部分:
为了将DIV_Fraction转换为寄存器中的值,我们需要将其乘以16(因为小数部分占用4位,所以最大值为15,即(16-1)): [ DIV_Fraction_{寄存器值} = 0.083 \times 16 = 1.328 \approx 1 ]
因此,DIV_Mantissa和DIV_Fraction在寄存器中的表示为:
组合起来,USART_BRR寄存器的值为0x341。
至于实际波特率的计算,它基于设置的USARTDIV值,但由于寄存器只能存储整数和有限的小数精度,实际波特率会有一些偏差。实际波特率计算公式如下: [ 实际波特率 = \frac{fPCLK2}{8 \times (2^{OVER8}) \times (DIV_Mantissa + DIV_Fraction/16)} ]
代入上面计算得到的值: [ 实际波特率 = \frac{8 \text{ MHz}}{8 \times (2^0) \times (52 + 1/16)} = \frac{8 \text{ MHz}}{8 \times 52.0625} = 9604 \text{ bps} ]
这就是题目中提到的实际波特率为9604 bps的由来。希望这解释了你的疑问,并且提供了清晰的步骤来理解和计算STM32中USART的实际波特率。