码迷,mamicode.com
首页 > 其他好文 > 详细

串口之波特率计算

时间:2019-10-02 10:39:03      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:ima   结构   spl   时钟   oid   text   一个   tis   公式   

技术图片

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;
}

 

串口之波特率计算

标签:ima   结构   spl   时钟   oid   text   一个   tis   公式   

原文地址:https://www.cnblogs.com/anSn/p/11616743.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!