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

    关注

    2252

    文章

    10735

    浏览量

    350973
  • 串口
    +关注

    关注

    14

    文章

    1516

    浏览量

    74954
  • 波特率
    +关注

    关注

    2

    文章

    286

    浏览量

    33866

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

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

收藏 人收藏

    评论

    相关推荐

    can波特率计算

    can波特率其实并不难计算,这里给出了can波特率的简单计算,并给出了实例STM32的CAN波特率
    发表于 12-14 17:02 1.2w次阅读
    can<b class='flag-5'>波特率</b><b class='flag-5'>计算</b>

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

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

    什么是串口波特率串口波特率的分类及应用详解

    什么是串口波特率串口波特率是指串口通信系统中传输数据的速率。在UART串口通信中,数据以位(bi
    的头像 发表于 08-08 10:09 4356次阅读
    什么是<b class='flag-5'>串口</b><b class='flag-5'>波特率</b>?<b class='flag-5'>串口</b><b class='flag-5'>波特率</b>的分类及应用详解

    STM32F4波特率计算方法

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

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

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

    串口波特率计算工具下载

    串口波特率计算工具
    发表于 03-11 09:38 179次下载

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

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

    51单片机串口初值和波特率计算器应用程序免费下载

    本文档的主要内容详细介绍的是51单片机串口初值和波特率计算器应用程序免费下载。
    发表于 10-15 08:00 8次下载
    51<b class='flag-5'>单片机</b><b class='flag-5'>串口</b>初值和<b class='flag-5'>波特率</b><b class='flag-5'>计算</b>器应用程序免费下载

    51单片机定时计数器的溢出计算串口波特率到底有什么关系

    本文档的主要内容详细介绍的是51单片机定时计数器的溢出计算串口波特率到底有什么关系。
    发表于 09-12 17:23 1次下载
    51<b class='flag-5'>单片机</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>说明

    如何计算8051单片机波特率

    8051单片机使用定时器1工作在方式2的情况下作为串口波特率发生器,其波特率=(2smod/32)×(定时器T1溢出),其中smod是PC
    发表于 11-18 16:39 3589次阅读

    51单片机--串口操作上机实验 及 常用波特率初值表

    单片机与PC通信在上位机上用串口调试助手发送一个字符,单片机收到字符后返回给上位“I GET X”,
    发表于 11-23 16:36 1次下载
    51<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>详解

    STM32 USB虚拟串口波特率问题(含源码)

    ,需要将单片机真实串口(这里以USART1为例)的收发数据与USB口进行交互。用过USB虚拟串口的朋友可能知道,要实现该功能,还存在以下问题:1.电脑上设置的串口
    发表于 12-28 19:51 21次下载
    <b class='flag-5'>STM32</b> USB虚拟<b class='flag-5'>串口</b><b class='flag-5'>波特率</b>问题(含源码)

    STM32波特率计算详解

    波特率计算 STM32下的波特率串口外设时钟息息相关,USART 1的时钟来源于APB2,USART 2-5的时钟来源于APB1。在
    发表于 02-11 10:46 20次下载
    <b class='flag-5'>STM32</b>下<b class='flag-5'>波特率</b><b class='flag-5'>计算</b>详解