0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32单片机的串口通信波特率计算方法

GReq_mcu168 来源:未知 作者:胡薇 2018-05-10 11:49 次阅读

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寄存器。

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2239

    文章

    10669

    浏览量

    348705
  • 波特率
    +关注

    关注

    2

    文章

    280

    浏览量

    33758

原文标题:STM32单片机的串口通信波特率应该这样计算~

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32单片机串口波特率计算方法

    不管是什么单片机,在使用串口通信的时候,有一个非常重要的参数:波特率。什么是波特率波特率就是每
    的头像 发表于 01-05 09:59 2.7w次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>单片机</b>的<b class='flag-5'>串口</b><b class='flag-5'>波特率</b><b class='flag-5'>计算方法</b>

    STM32串口波特率大小计算案例

    波特率计算 STM32下的波特率串口外设时钟息息相关,USART 1的时钟来源于APB2,USART 2-5的时钟来源于APB1。在
    的头像 发表于 10-23 14:19 7516次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>波特率</b>大小<b class='flag-5'>计算</b>案例

    单片机与PC串行通信中波特率的确定

    ,而与之对应的PC除数锁存器的值是11(0BH)。  6结语  在串行异步通信中波特率的确定是一个至关重要的问题,由于单片机波特率计算
    发表于 09-05 10:59

    串口通信波特率与初值

    在用51单片机串口通信的时候涉及到波特率与初值的计算问题、下面有个计算小工具,便于你
    发表于 12-05 22:49

    51单片机串口通信波特率定时计算

    本人在无聊期间,用VC写了一个的51单片机串口通信波特率定时计算器,在此分享,有需要的可以下载,高手莫见笑..
    发表于 04-09 22:45

    请问用单片机的普通IO做串口怎么计算波特率

    如果用单片机的普通IO做串口 这样是怎么计算波特率的????单片机是16M不分频delay做延迟!!!
    发表于 12-31 15:58

    51单片机串口波特率测试提问

    问题,特别是51单片机这种晶振可以轻易更换的低端单片机计算波特率出现小数位),测试确实没有问题的时候再来使用串口。希望对大家有一定的启发
    发表于 09-24 19:22

    STM32F4波特率计算方法

    单片机波特率寄存器配置方法,导致实际的波特率与200000相差很大,往往当误差大于2%时就不能稳定通讯了。因此,在获得尽量高的波特率的同时
    发表于 08-17 09:14

    STM32F4的高波特率与低误差的计算方法是什么

    怎样去计算STM32F4的波特率呢?STM32F4的高波特率与低误差的计算方法是什么?
    发表于 11-19 06:14

    单片机波特率与字节传输速率计算

    常用换算公式整理文章目录常用换算公式整理单片机波特率与字节传输速率计算采样和数据大小的关系单片机波特率
    发表于 01-07 07:06

    单片机串口波特率和上位波特率相同还是乱码怎么解决?

    单片机串口设置为115200后,打开串口助手,也设置为115200,发现依旧乱码。将串口助手波特率设置为38400后,发现正常打印。思索一
    发表于 01-19 07:39

    串口波特率计算怎么计算

    STM32波特率计算详解波特率计算    STM32下的
    发表于 02-08 06:28

    单片机与PC机串行通信中波特率的确定

    本文详细论述了单片机与PC机串行通信中波特率的确定原则和方法,特别给出了PC机与单片机串行通信中非标准
    发表于 08-01 17:29 1691次阅读

    51单片机串口波特率计算方法说明

    本文档的主要内容详细介绍的是51单片机串口波特率计算方法说明。对于11.0592M晶振 bot=256-(11059200/9600/32) 此处
    发表于 07-11 17:40 4次下载
    51<b class='flag-5'>单片机</b><b class='flag-5'>串口</b><b class='flag-5'>波特率</b>的<b class='flag-5'>计算方法</b>说明

    STM32单片机串口波特率计算方法解析

    不管是什么单片机,在使用串口通信的时候,有一个非常重要的参数:波特率。什么是波特率波特率就是每
    发表于 08-15 15:30 5893次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>单片机</b><b class='flag-5'>串口</b><b class='flag-5'>波特率</b>的<b class='flag-5'>计算方法</b>解析