STM32串口波特率大小计算

发布时间:2023-04-03  

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


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>