USART1的波特率公式:Baud_Rate = Fck/(16*USARTDIV) USARTDIV = Fck/(16*Baud_Rate) 然后按下述方法计算,例如总线时钟频率为72MHz,配置波特率为9600过程如下: 求得:USARTDIV = 468.75, 因为STM32的波特比率寄存器USART_BRR分为整数部分和小数部分,所以分开计算。 则有,小数部分:DIV_Fraction = 16*0.75 =12 注:这里是将10进制小数转换成16进制的小数所以乘以16** 最接近的整数是:12 = 0x0C 整数部分DIV_Mantissa = 取整 (468.75) = 468= 0x1D4 于是,USART_BRR = 0x1D4C 按此思路设置程序: void UsartBaud(u32 pclk2,u32 baud) { float tmp; u16 mantissa; // 整数部分 u16 fraction; // 小数部分 temp = (float) (pclk2*1000000)/(baud*16); // 计算得到USARTDIV mantissa = temp; // 得到整数部分 fraction = (temp-mantissa)*16; // 得到小数部分 // mantissa部分需左移 mantissa = mantissa << 4; //因为USART_BRR低4位是小数部分 USART1->BRR = mantissa + fraction; } |
关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )
GMT+8, 2025-9-25 09:52 , Processed in 0.125000 second(s), 28 queries , Gzip On.
地址:深圳市南山区科技生态园2栋A座805 电话:19926409050