2401_83585493 2024-06-09 15:26 采纳率: 0%
浏览 65

USART。实际波特率怎么计算的

img


题目中那个实际波特率哪来的哇,要根据div_fraction 怎么计算下能得到呢

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-09 15:26
    关注

    引自免费微信小程序:皆我百晓生

    在STM32中,USART(通用同步异步收发器)的波特率是通过配置寄存器中的USART_BRR(波特率寄存器)来设置的。USART_BRR寄存器包含两个部分:DIV_Mantissa(整数部分)和DIV_Fraction(小数部分),它们共同决定了实际的波特率。

    根据题目描述,我们有以下信息:

    • fPCLK2 = 8 MHz (这是USART1的时钟频率)
    • OVER8 = 0 (不启用8倍过采样模式)
    • 需求波特率 = 9600 bps

    首先,计算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_Mantissa = 52
    • DIV_Fraction = 0.083

    为了将DIV_Fraction转换为寄存器中的值,我们需要将其乘以16(因为小数部分占用4位,所以最大值为15,即(16-1)): [ DIV_Fraction_{寄存器值} = 0.083 \times 16 = 1.328 \approx 1 ]

    因此,DIV_Mantissa和DIV_Fraction在寄存器中的表示为:

    • DIV_Mantissa = 52 (0x34 in hexadecimal)
    • DIV_Fraction = 1 (0x01 in hexadecimal)

    组合起来,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的实际波特率。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月9日