关于STM32串口波特率的产生,以及USARTDIV写入到USART_BRR寄存器的值

#关于STM32串口波特率的产生,以及如何从USART_BRR寄存器值得到USARTDIV
波特率计算公式
fCK是时钟频率,这里我们假设72000000Hz,如果需要设置的波特率为115200,那我们可以计算出USARTDIV = 39.0625

我们将39.0625写到USART_BRR寄存器
USART_BRR寄存器
从图中可以看出,USART_BRR寄存器的前四位表示小数部分也就是0.0625,第五位到第十六位表示整数部分也就是39.
即:DIV_Mantissa = 0x27
那么小数部分呢?
我们来看一下,小数部分的最大值就是1,而4位的表示就把1分成了16份,每一份都表示1/16。
将0.0625除以1/16就得到了小数部分写入的值,即DIV_Fraction = 0x01.
那么USART_BRR = 0x271.

  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要设置 STM32串口波特率,需要先配置串口的时钟源和时钟分频器,然后计算出波特率对应的波特率发生器的,并将其写入 USART_BRR 寄存器中。具体步骤如下: 1. 通过 RCC_ClocksTypeDef 结构体获取系统时钟频率和串口时钟频率。 ```c RCC_ClocksTypeDef RCC_Clocks; RCC_GetClocksFreq(&RCC_Clocks); uint32_t PCLKx = RCC_Clocks.PCLKx_Frequency; ``` 2. 配置 USART 的时钟源和时钟分频器,使其与波特率发生器的时钟频率相同。 ```c // 时钟源为 APB1 时钟,分频器为 1,使 USART 时钟频率与 PCLKx 相同 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); USART_ClockInitTypeDef USART_ClockInitStructure; USART_ClockInitStructure.USART_Clock = USART_Clock_Enable; USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge; USART_ClockInitStructure.USART_LastBit = USART_LastBit_Enable; USART_ClockInit(USART2, &USART_ClockInitStructure); ``` 3. 计算波特率对应的波特率发生器的。 ```c uint32_t BaudRate = 115200; uint32_t Mantissa = PCLKx / (16 * BaudRate); uint32_t Fraction = (PCLKx % (16 * BaudRate)) * 16 / (16 * BaudRate); uint32_t BRR = (Mantissa << 4) + Fraction; ``` 4. 将波特率发生器的写入 USART_BRR 寄存器中。 ```c USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = BaudRate; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART2, &USART_InitStructure); USART2->BRR = BRR; ``` 这样就完成了 STM32串口波特率的设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值