串行波特率(常用的串行波特率有哪些)
1.什么是波特率?
无论是哪种单片机,使用串行通信时都有一个很重要的参数:波特率。什么是波特率:波特率是每秒传输的字节数。在数据传输过程中,双方具有相同的波特率,这是通信成功的基本保证。以STM32单片机为例讲解串口波特率的计算方法。
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为例,公式变形后得到usart div = 72×100000/(16×115200)= 39.0625。将39.0625写入BRR USART。
如前所述,USART_BRR的前4位存储小数部分,后12位存储整数部分。
分数DIV _ Fraction = 0.0625× 16 = 1 = 0x01;
那个整数部分DIV _ Mantissa = 39 = 0x27;
USART _ BRR = 0x 271;
数据手册为我们提供了一份数据表:
形式
在这个数据表上,已经计算出了常用的波特率值,我们可以直接使用。但是如果我们想让波特率的计算成为传递参数函数的一种方式,
比如USART_INIT(uint_t 16 Baud)调用时只需要写USART_INIT(9600)和USART_INIT(115200),那么程序怎么写呢?
4.计划的实施。
以下是该程序的注册版本。
代码部分
程序第一步2行:首先计算USART_DIV,这是前面公式的变体;
第2步,3行程序:获取USART_DIV的整数部分;
程序第4行第3步:获取USART_DIV的小数部分;
第4步,程序的5行:将整数部分左移4位,即存入BRR寄存器的后12位;
第5步,6行程序:将整数和小数部分组合在一起,即前4位和后12位重新组合;
第6步,第7行:将计算出的值赋给BRR寄存器。
这样一个以波特率为参数的功能就完成了。从以上来看,波特率的计算似乎不是很难。
欢迎关注头条“玩转嵌入式”,获取更多电子设计知识!
本文地址:[https://chuanchengzhongyi.com/kepu/93807760c29d0cb8.html]