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为例,将公式变形后得到: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寄存器。
这样一个将波特率作为形参的函数就完成了。从以上来看的话,波特率的计算好像也不是很难啊。
iphonex支持5g网络吗
ROF技术介绍及其在网络融合中的应用
珠海盈致科技在MES系统开发方面有哪些优势?
模拟电路与数字电路的区别详解
反向电流保护电路-Reverse-Current Circu
STM32单片机的串口通信波特率计算方法
OPPOFindX评测 触摸到前所未有的新鲜感
5G商用进程领跑地位非华为莫属
外媒:2017年中国智能手机市场首次出现年度总出货量下滑态势
台湾知名半导体企业负责人:地缘政治改变了市场循环模式
碱性锌锰电池的组成_碱性锌锰电池参数表
传感器未来发展趋势分析
介绍一款GNU/Linux上跟踪USB设备的取证工具
真正意义上的无人驾驶巴士车来袭 能准确绕过障碍物自动调整前进速度
智能手机Q1销量惨淡 争抢优质客户“剩”者为王
新一代高性能集成功放LM3886
杰理下载器强制工具远程升级的方法说明,需要工具
华为下一代可折叠屏手机或采用三星可折叠显示屏
预计到2025年车联网产业市场规模将达2162亿美元
MEMS传感技术在工业设备领域中的发展趋势