串口 pclk2和波特率到底有什么关系?
为什么寄存器版本中,串口初始化函数有两个参数,pclk2和bound, 而库函数版中,只有bound一个参数: 以下内容整理自寄存器版的开发指南: 波特率计算公式 当OVER8 = 0 时 Tx / Rx 就是波特率? fPCLKx是串口时钟 PCLK1 用于 USART2~5 PCLK2 用于 USART1 和USART6 USARTDIV 是一个无符号定点数 波特率寄存器 USART_BRR STM32F4 的每个串口都有波特率寄存器 USART_BRR, 32位,其中高16位保留 mantissa是整数部分 fraction是小数部分 * 16 (OVER8 = 0时乘16,OVER8 = 1 时乘不知道多少) 波特率计算举例 假设串口 1 要设置为 115200 的波特率,而 PCLK2 的时钟(即 APB2 总线时钟频率) 为 84M 求USARTDIV: USARTDIV = fpCLK2 / 16 / 波特率 = 84000000 / 16 / 115200 = 45.572 故 整数部分为 45 ,DIV_Mantissa = 45 = 0x2D 小数部分为 0.572 ,DIV_Fraction = 0.572 * 16 = 9.152 = 0x09 OVER8 位 接收器过采样设置位: OVER8 位, 该位在USART_CR1 寄存器里面设置, 当 OVER8