首页 > 编程知识 正文

stm32串口最高波特率(STM32中如何计算波特率)

时间:2023-05-05 02:36:35 阅读:121743 作者:1737

波特率计算STM32中的波特率与串行外围设备的时钟关系密切,USART 1的时钟来源于APB2,USART 2-5的时钟来源于APB1。 STM32具有以下波特率寄存器USART_BRR : STM32串行波特率由USART_BRR设置,STM32波特率寄存器支持分数设置以提高精度。 USART_BRR的前四位表示小数,后十二位用于表示整数。 但是,它还不是我们想设定的波特率,而是我们串行端口的波特率大小需要计算。 其实波特率的计算是下面的公式。 根据上式,引入了新量的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的前四位部分,最后一个USART_BRR的值为0x1BC。 注意:如果小数部分乘以16仍有小数,则将小数部分四舍五入以获取新整数,并将其写入USART_BRR的前四位。 为什么用计算波特率的公式乘以16? 据了解,串行通信通过TXD和RXD两条线进行通信。 发射器的TXD连接到接收器的RXD,发射器的RXD连接到接收器的TXD,接收器和发射器可以通过RXD和TXD相互发送和接收数据。 当接收器检测到RXD这条线的电平被拉到低电平时,它立即开始接收发射器发送来的数据。 正好它的低电平只是通知接收器可以接收数据的起始位。 在数据传输中,信号可能受到一些干扰而发生抖动,如下图所示。 因为如果接收侧仅采样一次这些信号数据,则抖动的不正确的数据被采样,并且数据传输可能不正确,所以接收侧的采样数据线上的数据通常被多次采样,并且通过比较获得正确的数据如上所述,USARTDIV表示对串行端口的时钟源fck进行分频,这16表示1位数据的采样次数。 为什么呢? 中选择所需的墙类型。 如果反转此表达式的分子分母,则以下表达式的每位传输时间只有1/TX_baud : 由于该合计时间除以16,因此每次采样的时间正好为T1,即新分频的周期。 初始串行时钟信号来自APBx,并且APBx时钟信号必须被分频以等于T1,因此必须对USARTDIV进行分频。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。