STM32之串口波特率計算


1.1 波特率結構框圖

 

1.2 波特率寄存器示意圖

 

 

1.3 波特率計算公式示意圖

 

兩圖看出,串口波特率寄存器是一個32位,只用低16位,低16位又划分,低4位用來裝小數,其他用來裝整數。

波特率計算公式:Tx/Rx 波特率  = fCK/(8*(2- OVER8 )* USARTDIV)

  USARTDIV =  fCK/8*(2- OVER8 )/TxRx 波特率

  Tx/Rx 波特率已知值    //就是我們我們平常說設置的115200Hz.

  fCK是已知值     //串口時鍾84MHz

  OVER8通過CR1寄存器設置

  USARTDIV的值是寫入到BRR寄存器,需要計算的值。

如下列:

void Usart1_Init(u32 baudRate)//假設baudRate=115200Hz
{
    float USARTDIV;
    u16 Mantissa;  

    /****設置波特率***/
    //USARTDIV =  fCK/8*(2- OVER8 )/TxRx 波特率
    //USARTDIV=   Mantissa+(Fraction/8*(2-OVER8 ))    

    USARTDIV = (float)84000000/8/baudRate;//設OVER8 =1;fck=84000000Hz
    Mantissa = (int)USARTDIV;//取整數部分
    Fraction = (u8)((USARTDIV-Mantissa)*16);//把小數部分整成16位整數
    USART1->BRR = Mantissa<<4 | Fraction;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM