Stm32设置串口300波特率

  本文以串口4为例子:

  在APB1为72MHz的时钟频率下,是设置不了300波特率的,原因在于 Tx/Rx baud = fck / (16 * reg_value) ,reg_value是写进USART_BRR寄存器里。

  比如我们要设置300波特率, reg_value = 72000000/ (16 * 300) = 15000,虽然能计算出来,但注意,USART_BRR的前四位存放的是小数部分,后12位存放的是整数部分,所以整数部分最大位4095,根本达不到15000,因此只能改变APB1的时钟频率。

  调用  RCC_PCLK1Config(RCC_HCLK_Div4);  把72MHz除于4 等于18MHz, reg_value = 18000000/ (16 * 300) = 3750  3750这个值是够放的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值