干货! STM32串口波特率计算

波特率计算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的频率。

*本文在线转载,版权归原作者所有。

如果有任何侵权,请联系以将其删除。

免责声明:本文的内容是在21ic授权后发布的。

版权属于原始作者。

该平台仅提供信息存储服务。

本文仅代表作者的个人观点,并不代表该平台的立场。

如有任何疑问,请与我们联系,谢谢!

产品知识/行业、品牌资讯