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寄存器。
这样一个将波特率作为形参的函数就完成了。从以上来看的话,波特率的计算好像也不是很难啊。
浅析基于SLAM的机器人自主定位导航
电子纸厂商:抢占可穿戴设备市场
基于RFID技术的智能仓储管理系统
电瓶车充电桩收费平台介绍
虹科推出多款CANopen IO模块及hipecs系列模块通讯测试
STM32单片机串口波特率的计算方法解析
成为软件测试工程师应该有哪些能力
2K价位5G手机如何选?强悍配置iQOO Neo3已经开售
7.13最新更新IC电子通信职位
智能电视在物联网与5G时代的崛起与扩张
电机是什么和什么的总称
Zynq-7000 可扩展处理平台研究
大功率PCB的设计
5G对于智慧物流最明显的帮助是什么
猎豹的AI战略失败了吗?
上达电子落户遂宁高新区 将投资60亿元建产业基地
关于人工智能的日常应用很多人都不知道
测量应用挑选总线的标准是什么
研究人员设计了一种称为Neuropixels 2.0的新型微型化探针
2012年未来十大消费趋势预测