STM32中如何计算波特率

发布者:变形金刚最新更新时间:2021-03-03 来源: eefocus关键字: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。

关键字:STM32  波特率 引用地址:STM32中如何计算波特率

上一篇:基于STM32芯片和TFT-LCD的便携式心电图仪设计
下一篇:XPT2046触摸屏实验过程详解与STM32代码解析

推荐阅读最新更新时间:2024-11-13 11:17

stm32的按键控制
1 /* 2 ::按键控制 3 PA8接LED,PE2接按键 4 */ 5 #include stm32f10x.h 6 void RCC_Configuration(void); 7 void GPIO_Config(void); 8 void Delay(__IO uint32_t nCount); 9 10 int main() 11 { 12 RCC_Configuration(); //系统时钟配置|使能GPIO口 13 GPIO_Config(); //LED控制配置 14 while (1) 15 { 16 if(!GPIO_ReadInpu
[单片机]
STM32高分辨率定时器(HRTIM)使用笔记
简介:STM32高分辨率功能非常强大,寄存器数量非常多,使用起来也比较麻烦,本文使用HRTIM1产生一组互补输出的PWM。 高分辨率定时器的初始化比普通定时器要复杂得多, HRTIM_OutputCfgTypeDef HRTIM_TIM_OutputStructure;//配置输出特性,高低电平等 HRTIM_BaseInitTypeDef HRTIM_BaseInitStructure;//配置基本参数,这部分和普通定时器一样 HRTIM_TimerInitTypeDef HRTIM_TimerInitStructure; //配置不同模式 HRTIM_TimerCfgTypeDef HRTIM_TimerW
[单片机]
让MDK支持printf(基于stm32
1、在Option- Target选项框里选Use MicroLib 选项 2、在将要调用printf的函数的c文件中包含头文件 #include stdio.h 3、在该c文件中添加如下函数: int fputc(int ch, FILE *f) { //USART_SendData(USART1, (u8) ch); USART1- DR = (u8) ch; /* Loop until the end of transmission */ while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET) { } return ch; }
[单片机]
STM32采用HAL库HAL_UART_Receive_IT()多次开启的问题
硬件平台:STM32F429 软件平台:Keil 5 采用HAL库 本人借鉴了正点原子的例程,在这里表示感谢。 在编写串口的过程中,遇到了 HAL_UART_Receive_IT(&UART1_Handler, (u8 *)aRxBuffer, 1);1 这个函数,首先是在初始化uart_init(115200)的时候调用了一次。 紧接着,在串口中断服务函数里,又调用了一次,继续接收,这样就不会造成接收完指定的的数据帧长度就不会进入中断了。如下图: 在这里,我们需要引入原子哥的一张图, 由此图可知: 采用HAL库,中断方式接收串口,只有当RxXferCount == 0 时,也就是调用这个函数,接收指定量的数据大小完成
[单片机]
<font color='red'>STM32</font>采用HAL库HAL_UART_Receive_IT()多次开启的问题
STM32单片机最小系统设计
序言 我们大多数人在学习stm32过程中都会陷入这样一个误区————只关注软件代码层面而忽视了硬件层面,简单来说就是只会用开发板,一旦需要设计自己的stm32系统就无从下手。本文旨在完成stm32最小系统的设计。 STM32最小系统的组成 STM32最小系统简述 STM32最小系统,就是能让STM32单片机能够正常工作所必须拥有的组成部分的集合,也是STM32单片机正常运行的必要环境。STM32最小系统主要组成部分有: stm32最小系统包括: 1.供电电路; 2.时钟电路; 3.下载电路; 4.复位电路; 5.BOOT启动模式选择。 因为STM32单片机内部已经集成了时钟电路,所以STM32只需有供电和复位电路就能正常运
[单片机]
<font color='red'>STM32</font>单片机最小系统设计
J-Flash下载STM32用J-link的设置方法
J-link几乎可以调试所有的arm芯片,不得不说是个好东东。这里记录三种stm32的下载程序方式: 1.J-Flash下载(需要用到J-link) 2.MDK配置下载(需要用到J-link) 3.ISP下载(串口下载,需要用到官配串口下载软件,用过stc51的对这个都不会陌生吧) ---------------------------------------------------------------------------------------------- 1.J-Flash下载(需要用到J-link)先安装J-link驱动,可以到 http://www.segger.com/cms/jlink.html 下载最新驱动
[单片机]
J-Flash下载<font color='red'>STM32</font>用J-link的设置方法
STM32嵌入式开发中的RTOS应用分析
1 FreeRTOS 由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。 相对于C/OS-II、 embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行,其最新版本为6.0版。 作为一个轻量级的操作系统,FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。 FreeRTOS内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU总是让
[单片机]
<font color='red'>STM32</font>嵌入式开发中的RTOS应用分析
STM32 ADC的采样周期确定
一 STM32 ADC 采样 频率的确定   先看一些资料,确定一下STM32 ADC 的时钟:   (1),由时钟控制器提供的ADCCLK 时钟和PCLK2(APB2 时钟)同步。CLK 控制器为ADC 时钟提供一个专用的可编程预分频器。   (2)一般情况下在程序 中将 PCLK2 时钟设为 与系统时钟 相同   RCC_HCLKConfig(RCC_SYSCLK_Div1);   RCC_PCLK2Config(RCC_HCLK_Div1);   RCC_PCLK1Config(RCC_HCLK_Div2);   (3)在时钟配置寄存器(RCC_CFGR) 中 有 为ADC 时钟提供一个专用的可编程预分器   位15:14 A
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved