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

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

3天内不再提示

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

贸泽电子设计圈 来源:未知 作者:佚名 2018-01-05 09:59 次阅读

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
    +关注

    关注

    2232

    文章

    10649

    浏览量

    347874
  • 串口
    +关注

    关注

    14

    文章

    1478

    浏览量

    74329
  • 波特率
    +关注

    关注

    2

    文章

    277

    浏览量

    33731

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

文章出处:【微信号:Mouser-Community,微信公众号:贸泽电子设计圈】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

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

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

    单片机原理与应用: 波特率计算#单片机

    单片机波特率波特率发生器
    学习硬声知识
    发布于 :2022年11月08日 19:07:59

    MSP430系列单片机串口通讯波特率计算..

    MSP430系列单片机串口通讯波特率计算..
    发表于 05-17 21:28

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

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

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

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

    51单片机串口波特率配置 精选资料分享

    51单片机串口波特率计算方式0的波特率配置方式2的波特率配置方式1和3的
    发表于 07-21 07:52

    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

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

    不管是什么单片机,在使用串口通信的时候,有一个非常重要的参数:波特率。什么是波特率波特率就是每秒传送的字节数。双方在传输数据的过程中,
    的头像 发表于 05-10 11:49 2.2w次阅读
    <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>

    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 5823次阅读
    <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下的
    发表于 12-05 09:06 21次下载
    <b class='flag-5'>串口</b><b class='flag-5'>波特率</b><b class='flag-5'>计算</b>详解