串口 pclk2和波特率到底有什么關(guān)系?

2019-06-05
為什么寄存器版本中,串口初始化函數(shù)有兩個(gè)參數(shù),pclk2和bound,
而庫函數(shù)版中,只有bound一個(gè)參數(shù):

以下內(nèi)容整理自寄存器版的開發(fā)指南:

波特率計(jì)算公式

當(dāng)OVER8 = 0 時(shí)


image.png
  • Tx / Rx 就是波特率?
  • fPCLKx是串口時(shí)鐘
    • PCLK1 用于 USART2~5
    • PCLK2 用于 USART1 和USART6
  • USARTDIV 是一個(gè)無符號定點(diǎn)數(shù)

波特率寄存器 USART_BRR

STM32F4 的每個(gè)串口都有波特率寄存器 USART_BRR
32位,其中高16位保留

image.png

  • mantissa是整數(shù)部分
  • fraction是小數(shù)部分 * 16 (OVER8 = 0時(shí)乘16,OVER8 = 1 時(shí)乘不知道多少)

波特率計(jì)算舉例

假設(shè)串口 1 要設(shè)置為 115200 的波特率,而 PCLK2 的時(shí)鐘(即 APB2 總線時(shí)鐘頻率) 為 84M
求USARTDIV

USARTDIV
= fpCLK2 / 16 / 波特率
= 84000000/16/115200
= 45.572

整數(shù)部分為45,DIV_Mantissa = 45 = 0x2D
小數(shù)部分為0.572,DIV_Fraction = 0.572 * 16 =9.152 = 0x09

OVER8 位

接收器過采樣設(shè)置位: OVER8 位,
該位在USART_CR1 寄存器里面設(shè)置,
當(dāng) OVER8=0 的時(shí)候,采用 16 倍過采樣,可以增加接收器對時(shí)鐘的容差,精度高,容錯(cuò)性好。
當(dāng) OVER8=1 的時(shí)候,可以獲得更高的速度。
我們一般設(shè)置 OVER8=0,以得到更好的容錯(cuò)性,以下皆以 OVER8=0 進(jìn)行介紹。
關(guān)于 OVER8 的詳細(xì)介紹,請看《STM32F4xx 中文參考手冊》第 26.3.3 節(jié)。

結(jié)論

波特率是由plk和其他一些寄存器的值共同決定的
確切的說,波特率由USART_CR1 寄存器里的OVER8位,波特率寄存器 USART_BRR的值,和對應(yīng)的時(shí)鐘pclk頻率共同決定,公式在上方。
寄存器版中,將pclk的值作為參數(shù),傳進(jìn)來參與計(jì)算
而庫函數(shù)版中,可能是通過其他方式獲得了時(shí)鐘頻率,因此可以直接設(shè)置波特率

void uart_init(u32 bound) //庫函數(shù)版
void uart_init(u32 pclk2,u32 bound) //寄存器版
這兩個(gè)函數(shù)中,bound參數(shù)一樣時(shí),可以認(rèn)為效果是等價(jià)的

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容