美文网首页
串口 pclk2和波特率到底有什么关系?

串口 pclk2和波特率到底有什么关系?

作者: YuQiao0303 | 来源:发表于2019-06-05 10:39 被阅读0次

    2019-06-05
    为什么寄存器版本中,串口初始化函数有两个参数,pclk2和bound,
    而库函数版中,只有bound一个参数:

    以下内容整理自寄存器版的开发指南:

    波特率计算公式

    当OVER8 = 0 时


    image.png
    • Tx / Rx 就是波特率?
    • fPCLKx是串口时钟
      • PCLK1 用于 USART2~5
      • PCLK2 用于 USART1 和USART6
    • USARTDIV 是一个无符号定点数

    波特率寄存器 USART_BRR

    STM32F4 的每个串口都有波特率寄存器 USART_BRR
    32位,其中高16位保留

    image.png
    • 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=0 的时候,采用 16 倍过采样,可以增加接收器对时钟的容差,精度高,容错性好。
    当 OVER8=1 的时候,可以获得更高的速度。
    我们一般设置 OVER8=0,以得到更好的容错性,以下皆以 OVER8=0 进行介绍。
    关于 OVER8 的详细介绍,请看《STM32F4xx 中文参考手册》第 26.3.3 节。

    结论

    波特率是由plk和其他一些寄存器的值共同决定的
    确切的说,波特率由USART_CR1 寄存器里的OVER8位,波特率寄存器 USART_BRR的值,和对应的时钟pclk频率共同决定,公式在上方。
    寄存器版中,将pclk的值作为参数,传进来参与计算
    而库函数版中,可能是通过其他方式获得了时钟频率,因此可以直接设置波特率

    void uart_init(u32 bound) //库函数版
    void uart_init(u32 pclk2,u32 bound) //寄存器版
    这两个函数中,bound参数一样时,可以认为效果是等价的

    相关文章

      网友评论

          本文标题:串口 pclk2和波特率到底有什么关系?

          本文链接:https://www.haomeiwen.com/subject/wsrjxctx.html