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

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

3天内不再提示

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

454398 来源:博客园 作者:cposture 2020-10-23 14:19 次阅读

波特率的计算

STM32下的波特率和串口外设时钟息息相关,USART 1的时钟来源于APB2,USART 2-5的时钟来源于APB1。在STM32中,有个波特率寄存器USART_BRR,如下:

STM32串口波特率通过USART_BRR进行设置,STM32的波特率寄存器支持分数设置,以提高精确度。USART_BRR的前4位用于表示小数,后12位用于表示整数。但是它还不是我们想要设置的波特率,想要设置我们串口的波特率大小还需要进行计算。其实有关波特率的计算是下面这一条表达式:

从上面的表达式,我们引入了一个新量USARTDIV,它表示对串口的时钟源fck进行分频。假设我们已知道了波特率和fck时钟频率的大小,那么通过上式便可以计算出USARTDIV的具体大小,然后再通过USART的值大小对波特率寄存器进行设置。

USARTDIV通过上面的表达式得出,是一个带有小数的浮点数(如27.75)。将小数部分和整数部分分开,分别得到一个整数值n(如27)和一个小数值m(如0.75)。有了这两个值我们便可以填写USART_BRR寄存器进而设置我们串口波特率大小了。

将整数部分m(27 = 0x1B)直接写入USART_BRR的后12位部分;将小数部分n乘以16后得到的整数值(如0.75 x 16 = 12 = 0xC)写入USART_BRR前4位部分,最后USART_BRR的值为0x1BC。

注意:如果小数部分乘以16之后仍带有小数,则要四舍五入去除小数部分得到一个新的整数,再将其写入USART_BRR的前四位。

为什么在计算波特率的公式中要乘以16?

​我们知道串口通信是通过TXD和RXD这两条线进行通信的,当接收器的RXD连接着发送器的TXD,接收器的TXD连接着发送器的RXD,接收器和发送器可以通过RXD和TXD互传数据。当接收器检测到RXD这条线的电平被拉为低电平,立即开始接收发送器发送过来的数据,刚刚那个低电平只是一个告知接收器可以接收数据的起始位而已。

在数据的传输中,信号可能受到一些干扰而产生一些抖动,如下图。如果接收端只对这些信号数据采样一次,那么它有可能采样到的是抖动的不准的数据,进而使数据传输不准确,所以接收端在采样数据线上的数据,通常都要采样多次,然后通过比较获得准确的数据。

前面已经说过,USARTDIV,它表示对串口的时钟源fck进行分频,而这16表示的正是1bit数据的采样次数。为什么呢?

,将这个表达式的分子分母倒过来,可以得到下面这条表达式

每一位的传输时间只有1/TX_baud,这个总时间除以16,所以每采样一次的时间正好是T1,即新分频后的周期。而初始的串口时钟信号来自于APBx,APBx时钟信号需要经过分频才会等于T1,所以才需要分频USARTDIV。
编辑:hfy

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

    关注

    2270

    文章

    10890

    浏览量

    355630
  • 串口通信
    +关注

    关注

    34

    文章

    1623

    浏览量

    55499
  • 时钟信号
    +关注

    关注

    4

    文章

    448

    浏览量

    28542
收藏 人收藏

    评论

    相关推荐

    波特率与串行通信的关系 各种设备波特率转换的方法

    波特率(Baud Rate)是串行通信中的一个重要参数,它指的是信号传输的速率,即单位时间内传输的符号(或信号状态)的数量。在串行通信中,波特率决定了数据传输的速度,因此对于通信效率和设备兼容性
    的头像 发表于 11-22 10:01 253次阅读

    常见的波特率标准和协议

    波特率是指在数据通信中,每秒钟传输的符号数(或比特数),是衡量数据通信速度的重要指标。在不同的通信协议和场景中,常见的波特率标准和协议有所不同。以下是一些常见的波特率标准和协议: 一、串口
    的头像 发表于 11-22 09:56 736次阅读

    波特率设置在串口通信中的重要性

    在现代通信技术中,串口通信作为一种基本的数据传输方式,扮演着不可或缺的角色。无论是在计算机与外部设备的连接,还是在工业自动化系统中的数据交换,串口通信都发挥着重要作用。波特率,作为
    的头像 发表于 11-22 09:51 342次阅读

    波特率的定义和计算方法 波特率与数据传输速度的关系

    。符号可以是数字、字母、声音、图像等,根据不同的符号来确定每个符号占据多长时间。 波特率计算方法 波特率计算方法通常有两种: 基于传输速率和符号位数 :
    的头像 发表于 11-22 09:49 796次阅读

    MCU串口自动识别波特率原理分析

    现在的单片机资源越来越丰富了,其中我们常用的串口也是内部集成了多个,关键功能也越来越强了。 我们有些应用可能会用到串口自动识别波特率,今天就来讲讲MCU串口自动识别
    的头像 发表于 10-23 16:12 495次阅读
    MCU<b class='flag-5'>串口</b>自动识别<b class='flag-5'>波特率</b>原理分析

    波特率9600和115200的区别

    限性。 1. 波特率的定义与计算 波特率,或称为波特,是衡量数据传输速率的单位,它表示每秒钟传输的信号单元数。在串行通信中,一个信号单元可以是一个比特(bit),也可以是多个比特组成的
    的头像 发表于 10-18 14:56 1316次阅读

    uart波特率和传输频率的关系 UART串口的常用波特率为多少

    频率是两个关键参数,它们之间存在一定的关系,并且UART串口有一系列常用的波特率。以下是对这两个概念的介绍。 一、UART波特率和传输频率的关系 1. 定义与区别 波特率(Baud R
    的头像 发表于 10-06 16:12 2390次阅读
    uart<b class='flag-5'>波特率</b>和传输频率的关系 UART<b class='flag-5'>串口</b>的常用<b class='flag-5'>波特率</b>为多少

    串口通信中的波特率你真的了解吗?差距竟如此重要!

    波特率串口通信中的作用在串口通信中,波特率起着至关重要的作用。因为在传输数据时,发送方和接收方需要以相同的波特率进行通信。如果两端的
    的头像 发表于 08-27 11:46 1356次阅读
    <b class='flag-5'>串口</b>通信中的<b class='flag-5'>波特率</b>你真的了解吗?差距竟如此重要!

    STM32U575串口接收+GPDMA波特率不匹配导致失败怎么解决?

    我用CubeMX配置的串口+GPDMA接收,115200波特率正常能用, 然后如果波特率设置错误为9600,再改回来115200,接收就不能用了,调试好像时DMA出错了,然后启用HAL_UARTEx_ReceiveToIdle_
    发表于 07-04 08:11

    如何使用示波器测量串口波特率

    详细介绍如何使用示波器测量串口波特率,包括准备工作、设置示波器、测试步骤、结果计算及注意事项等方面,旨在为读者提供一份详尽的指南。
    的头像 发表于 05-27 16:25 4804次阅读

    STM32F412串口波特率最大调到3.1M就上不去了,怎么解决?

    之前,用STM32F407的芯片做了串口usart6通讯,波特率调整到3.9M可以正常通讯,发送的数据也都对。现在换STM32F412后发现最大频率的
    发表于 04-02 07:50

    stm32mp157在linux系统下,串口波特率如何使用非标准波特率

    请问stm32mp157在linux系统下,串口波特率如何使用非标准波特率153600。内核或者设备树里需要怎么改动? 麻烦答复一下,最好能给个详细的更改示例,谢谢!
    发表于 03-14 06:21

    波特率发生器使用哪个定时器 波特率发生器的时钟来源是什么

    波特率发生器是一种用于控制串行数据通信速率的设备,它可以生成特定波特率的时钟信号。在嵌入式系统、通信设备和计算机硬件中,波特率发生器的使用十分常见。
    的头像 发表于 01-24 09:56 2100次阅读

    什么是串口波特率串口通信为什么要设置波特率

    什么是串口波特率串口通信为什么要设置波特率波特率与比特的关系 如何选择
    的头像 发表于 01-22 16:10 2124次阅读

    TC377波特率计算是否与帧大小有关?

    brZ 如图 471 所示, 我想知道这个波特率计算是否与帧大小有关? 例如,4 位帧、8 位帧、32 位帧?波特率是指一帧/秒吗? 对于 32 位帧,它是 32 位/秒?
    发表于 01-22 06:29