您的位置 首页 解答

怎么核算单片机的波特率

如何计算单片机的波特率-在这个公式上,共有三个变量,其中两个我们是知道的,Fck和Tx/Rx波特率这两个是已知的,USARTDIV是未知的。通过该公式的描述可以看出如果使用USART1的话,那Fck就是PCLK2=72MHz,否则就是PCLK1=36MHz,Tx/Rx波特率这个参数是已知的。只需要计算出USARTDIV的值赋值给USART_BRR寄存器就可以了。以115200为例,将公式变形后得到:USARTDIV = 72×1000000/(16×115200) = 39.0625。即将39.0625写入USART_BRR即可。

1. 什么是波特率

不论是什么单片机,在运用串口通讯的时分,有一个非常重要的参数:波特率。什么是波特率:波特率便是每秒传送的字节数。两边在传输数据的过程中,波特率共同,这是通讯成功的基本保障。

2. STM32波特率相关的寄存器

STM32单片机设置波特率的寄存器只要一个:USART_BRR寄存器,如下图所示。

怎样核算单片机的波特率

该寄存器的有效位数为16位,前4位用于寄存小数部分,后12位用于寄存整数部分。将波特率算出来后,数值填入这个波特率就能够了。下面介绍怎样核算。

3. 波特率核算方法

STM32的数据手册给出了核算方法,有一个公式,如下图所示:

怎样核算单片机的波特率

在这个公式上,共有三个变量,其间两个咱们是知道的,Fck和Tx/Rx波特率这两个是已知的,USARTDIV是不知道的。经过该公式的描绘能够看出假如运用USART1的话,那Fck便是PCLK2=72MHz,不然便是PCLK1=36MHz,Tx/Rx波特率这个参数是已知的。只需要核算出USARTDIV的值赋值给USART_BRR寄存器就能够了。以115200为例,将公式变形后得到:USARTDIV = 72×1000000/(16×115200) = 39.0625。行将39.0625写入USART_BRR即可。

前文说过,USART_BRR的前4位寄存小数部分,后12位寄存整数部分。

那小数部分DIV_FracTIon = 0.0625×16 = 1 = 0x01;

那整数部分DIV_ManTIssa = 39 = 0x27;

那USART_BRR = 0X271;

数据手册给咱们供给了一张数据表:

怎样核算单片机的波特率

在这张数据表上,现已算出了常用的波特率值,咱们能够拿来直接用。可是假如咱们想把波特率的核算做成一个传参函数的方法,

如:USART_INIT(uint_t 16 Baud),在调用时只需要写USART_INIT(9600),USART_INIT(115200),那程序该怎样写呢?

4. 程序的完成

下面介绍的是寄存器版的程序。

怎样核算单片机的波特率

程序第一步45行:先核算得到USART_DIV,这个便是前面公式的变形;

程序第二步46行:取得USART_DIV的整数部分;

程序第三步47行:取得USART_DIV的小数部分;

程序第四步48行:将整数部分左移4位,即存入BRR寄存器的后12位;

程序第五步49行:将整数和小数部分合在一起,即前4位和后12位重新组合;

程序第六步50行:将核算出来的数值赋给BRR寄存器。

这样一个将波特率作为形参的函数就完成了。从以上来看的话,波特率的核算如同也不是很难啊。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/jieda/346453.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部