今天小编要和大家分享的是控制,MCU相关信息,接下来我将从STM32单片机串口波特率的计算方法解析,寄存器(内存访问)ppt这几个方面来介绍。
控制,MCU相关技术文章STM32单片机串口波特率的计算方法解析
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),那程序该怎么写呢?