串口之波特率计算
Posted ansn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了串口之波特率计算相关的知识,希望对你有一定的参考价值。
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; }
以上是关于串口之波特率计算的主要内容,如果未能解决你的问题,请参考以下文章