STM32F4_TIM基本延时(计数原理)

发布者:幸福约定123最新更新时间:2021-01-19 来源: eefocus关键字:STM32F4  TIM  基本延时  计数原理 手机看文章 扫描二维码
随时随地手机看文章

https://yunpan.cn/cB3hC8amiyq2C  访问密码 5224

 

感兴趣的朋友研究下面实例“定时中断”

STM32F4_TIM基本定时(1ms定时中断)实例:

https://yunpan.cn/cB3CyILIXeaFc  访问密码 0ad9

 

STM32F4资料:

https://yunpan.cn/cR2pxqF5x2d9c  访问密码 53e7

 

 

Ⅲ、TIM计数原理描述

定时器可以简单的理解为:由计数时钟(系统时钟或外部时钟)一个一个计数,直到计数至我们设定的值,这个时候产生一个事件,告诉我们计数到了。


上面简单的描述懂了之后就是需要理解它们每一步骤的细节,比如:提供的时钟频率是多少、分频是多少等。

 

基本TIM框图:


 

通用TIM框图:


 

上面两图截取“STM32F4x5、x7参考手册”建议下载手册参看。

 

从上面两个TIM框图可以看得出来,通用TIM是包含了基本TIM的功能。也可以说基本定时器是定时器最基本的计数部分,我们该文主要就是围绕这部分来讲述,后续会其他更通用、高级的功能给大家讲述。

 

重要的几个参数(信息):

1.CK_INT时钟:一般由RCC提供(注意:其频率大部分都是系统时钟的一半,在程序中有一个除2的部分,详情请见RCC部分)。

 

2.CK_PSC时钟预分频:也就是对CK_INT分频。这个值范围:0 - 65535范围都可以,最好能被CK_INT除尽,这样才方便计算时钟。

 

3.ARR重载值:这个值相当于是我们设定需要计数的值,也就是说计数到这个设定值就会产生一个事件。

 

综上: CK_INT和CK_PSC确定计数的时钟频率(1秒计多少数), ARR是设定的计数值。最基本的延时(或定时)就由以上三个参数计算而来。

 

Ⅳ、基本延时源代码分析

笔者以F4标准外设库(同时也建议初学者使用官方的标准外设库)为建立的工程,主要以库的方式来讲述。

考虑大家到以后肯定使用定时器更多功能,笔者提供的软件工程实例是通用定时TIM4。其实,将工程中TIM4改为TIM6(基本定时器)一样可以运行的。

 

1.RCC时钟


该函数位于bsp.c文件下面;

 

重点注意:

A.外设RCC时钟的配置要在其外设初始化的前面;

 

B.匹配对应时钟。

比如:RCC_APB2外设不要配置在RCC_APB1时钟里面

【如:RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);这样能编译通过,但这是错误的代码】

 

2.TIM配置



该函数位于timer.c文件下面;

该函数就是配置定时器基本计数的函数;

 

配置为1us的基准:

A.1秒钟计数42M次个脉冲

“TIM基本延时”实例工程中:CK_INT = 84M时钟(SystemCoreClock/2)

 

“TIM基本延时”实例工程:CK_PSC = 84M/42M - 1 = 1  即2分频;

至于为什么要减1?

初学者可以理解为CK_PSC = 0”时不分频(即1分频);“CK_PSC = 1”时为2分频。

 

#define TIM4_COUNTER_CLOCK        42000000

#define TIM4_PRESCALER_VALUE      (SystemCoreClock/2/TIM4_COUNTER_CLOCK - 1)

 

B.1秒钟计数1M次个周期

#define TIM4_PERIOD_TIMING    (42 - 1)

即ARR重载值;

由上面“A”得出“1秒钟计数42M次个脉冲”,则记满42个脉冲数需要1us(也就是1秒钟计数1M次个周期)。

 

3.us(微妙)延时函数


该函数位于timer.c文件下面;

上图一个while循环就是1us的时间;上面的一些工作就是配置定时器工作一个周期的时间为1us,这里延时N微妙就应该很好理解了; 其实还有一个函数延时N毫秒,很简单,不描述。

 

Ⅴ、定时中断(拓展)

“定时中断”功能是基于前面基础上进行了一个拓展,增加了计数周期就中断的功能。

笔者单独提供了一个实例:定时1ms中断一次(两工程区别在于时间不是1us, 1us中断一次时间太短);

在软件上主要就是增加开启TIM中断、配置NVIC、添加TIM中断函数;

1.使能TIM中断


该函数位于(定时中断工程)timer.c文件下面;

功能:使能TIM中断。

 

2.配置NVIC中断控制器


该函数位于(定时中断工程)bsp.c文件下面;

功能:配置TIM中断控制。

 

3.中断函数


该函数位于(定时中断工程)stm32f4xx_it.c文件下面;

功能:定时周期到进入该中断函数。其中有一个计数减,相当于我们延时工程中while延时N的值;

 

 

Ⅵ、说明

关于笔者提供的软件工程实例,可关注微信,在会话框回复“关于工程”,有关于工程结构描述、型号修改等讲述。

 

以上总结仅供参考,若有不对之处,敬请谅解。


关键字:STM32F4  TIM  基本延时  计数原理 引用地址:STM32F4_TIM基本延时(计数原理)

上一篇:STM32F4_引领入门
下一篇:STM32F4_RCC系统时钟配置及描述

推荐阅读最新更新时间:2024-11-10 18:20

STM32-高级定时器TIM1的应用
void GPIO_Configuration(void)//配置IO脚 { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pi
[单片机]
STM32-高级定时器<font color='red'>TIM</font>1的应用
STM32F4学习笔记1——如何使用DSP库
配置 1、 安装DSP库文件 2、 配置编译环境, 上述添加是在project→options→C/C++→Define中添加,并且分割用逗号,即 __FPU_PRESENT=1,__FPU_USED=1,ARM_MATH_CM4,__CC_ARM 3、 在需要调用DSP函数的文件中加上 #include arm_math.h 4、 需要在project中添加用到的.c文件,看你用的是哪个函数,就添加哪个.c文件。.c文件目录为 XXX\Drivers\CMSIS\DSP_Lib\Source
[单片机]
<font color='red'>STM32F4</font>学习笔记1——如何使用DSP库
STM8 互补 PWM TIM1定时器 输出成功
程序测试: #include iostm8s003f3.h void PWM_INIT() { CLK_PCKENR1 |= 0x80;//开启定时器1外设时钟 TIM1_EGR |= 0x01; //重新初始化TIM1 TIM1_CR1 = 0x00; //B7(0)可以直接写入 B65(00)边缘对齐模式B4(0)向上计数B3(0)计数器不停止发生更新事件 TIM1_RCR = 0x00; TIM1_PSCRH =0; //设定预分频为,16分频 1M TIM1_PSCRL =0x80; //PWM的时钟 影响周期 TIM1_CCER1 = 0x0F; //CC2ER1开
[单片机]
STM8 互补 PWM <font color='red'>TIM</font>1定时器 输出成功
STM32F407玩控制—模式设别法PID参数自动整定
模式设别法PID参数自动整定,是指在闭环系统阶跃响应下(也可以是扰动响应下),设别出衰减比和振荡周期,这是主要两个量,另外也需要判断欠阻尼和发散振荡的情况,然后据此调整PID参数,理想目标是以4比1幅值衰减,这些量的辨识应该说并不难,但由于干扰的存在,问题就变得很复杂,识别有关状态后,就进行PID值得修改,这里修改就存在一个过犹不及的尴尬,pid参数调整幅度小了,就要增加次数,调整幅度过猛了,又要反过来再调,对这个系统是合适的调整,对另外一个未必是合适的调整,也不存在折中的办法,我们做的模式设别法PID参数自动整定效果如图1-图6所示,图1中系统响应曲线是振荡的,调整PID参数后,系统不再振荡,但调整过程时间太长,再一次调整PID
[单片机]
用<font color='red'>STM32F4</font>07玩控制—模式设别法PID参数自动整定
STM32F407 RTC 配置理解与总结
RTC: Real time clock 相比较而言,STM32F407的RTC比STM32F1的更加容易配置。当然,F4的资源相对也就更加丰富很多了。具体的资源可查看官方参考手册,通过下面的图表也可以了解其大致功能 1、开始的时候对于 ALRAM A/B的功能没有怎么理解,后面再来看时发现其很简单,举个简单的例子,就比如,定的闹钟,当然,这个也是可以实现闹钟的功能。只是通过这个简单的例子来说明,ALARM A/B的用途或者功能吧 2、自动唤醒与时间戳及时间篡改事件,与1的差不多,细细体会就知道 3、RTC_AFO 与 RTC_AFI 就是对外输出及检测外部时间事件 4、 RTC
[单片机]
<font color='red'>STM32F4</font>07 RTC 配置理解与总结
STM32F4 GPIO 呼吸灯
GPIO的一些特性,翻译自ST的参考手册 1、16组IO可用 2、推挽/开漏+上拉/下拉 3、可从ODR输出数据,也可从外设输出数据 4、每个IO速度可独立设置 5、浮空输入,上下拉输入,模拟输入 6、输入数据到IDR或者外设 7、ODR中数据可通过GPIOx_BSRR单独设置某一位。 8、IO锁定装置,可冻结IO配置。(知道下次reset) 9、模拟公呢 10、复用输入输出选择及存取 11、IO快速反转,两个时钟周期可反转一次。 12、易配置的复用功能,可使一个IO有多个功能。 本实验值用到了数字输出,控制IO反转时间以形成一组PWM波形驱动接在IO口上的LED。 【代码实现】 LED的定义: typedef enum {
[单片机]
基于STM32F4x9的LCD显示设计方案
  随着人机界面(GUI)在医疗、工业以及消费电子各应用领域需求的日益增长,高集成度、高性能的TFT 液晶显示方案成为电子产品设计开发的重要组成部分。在无内置液晶控制器的情况下,单片机与具有内置控制器的液晶板之间往往采用串行或并行的总线接口连接,受限于连接总线的数据传输速度,难以支持较高的显示分辨率和画面质量。   意法半导体推出了基于ARM Cortex-M4 内核的STM32F4x9 微处理器,借助内置的LCD-TFT 显示控制器和Chrom-ARM 图形加速器,使SVGA 高分辨率和高品质显示画面质量成为可能。本文围绕STM32F4x9 微控制器完成了液晶显示的硬件设计,并介绍了基于这一硬件平台以及STemWin 的软件
[单片机]
基于<font color='red'>STM32F4</font>x9的LCD显示设计方案
stm32f4_discovery上实现Flash移植!
调试Flash好几天了,之前在103上已经移植好了sd卡,现在想移植到f4上,发现底层的sd卡驱动还是有些区别的,区别最大是F4里面要为spi的sck,miso和mosi添加三条语句 GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_SPI1);,我改这个的时候没有仔细看,把这3条语句和并成一条语句 GPIO_PinAFConfig(GPIOA,GPIO_PinSou
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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