历史上的今天
今天是:2025年01月19日(星期日)
2021年01月19日 | STM32F4_TIM基本延时(计数原理)
2021-01-19 来源:eefocus
https://yunpan.cn/cB3hC8amiyq2C 访问密码 5224
感兴趣的朋友研究下面实例“定时中断”
STM32F4_TIM基本定时(1ms定时中断)实例:
https://yunpan.cn/cB3CyILIXeaFc 访问密码 0ad9
STM32F4资料:
https://yunpan.cn/cR2pxqF5x2d9c 访问密码 53e7
Ⅲ、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(基本定时器)一样可以运行的。

A.外设RCC时钟的配置要在其外设初始化的前面;
B.匹配对应时钟。
比如:RCC_APB2外设不要配置在RCC_APB1时钟里面
【如:RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);这样能编译通过,但这是错误的代码】


该函数就是配置定时器基本计数的函数;
配置为1us的基准:
“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(微妙)延时函数

上图一个while循环就是1us的时间;上面的一些工作就是配置定时器工作一个周期的时间为1us,这里延时N微妙就应该很好理解了; 其实还有一个函数延时N毫秒,很简单,不描述。
Ⅴ、定时中断(拓展)
“定时中断”功能是基于前面基础上进行了一个拓展,增加了计数周期就中断的功能。
笔者单独提供了一个实例:定时1ms中断一次(两工程区别在于时间不是1us, 1us中断一次时间太短);
在软件上主要就是增加开启TIM中断、配置NVIC、添加TIM中断函数;

该函数位于(定时中断工程)timer.c文件下面;
功能:使能TIM中断。
2.配置NVIC中断控制器

功能:配置TIM中断控制。
3.中断函数

该函数位于(定时中断工程)stm32f4xx_it.c文件下面;
功能:定时周期到进入该中断函数。其中有一个计数减,相当于我们延时工程中while延时N的值;
Ⅵ、说明
关于笔者提供的软件工程实例,可关注微信,在会话框回复“关于工程”,有关于工程结构描述、型号修改等讲述。
以上总结仅供参考,若有不对之处,敬请谅解。
上一篇:STM32F4_引领入门
史海拾趣
|
百度的答案,还请大家深入说说: RFIC是RF System 里的Block做成IC ,,基本上成品就是IC ; 而RFID是Radio-frequency identification 是一个系统,有特定的规范。 二者是否有确定的包含与被包含的关系呢?… 查看全部问答> |
|
I2C_IOControl 传一个数组出来,老不成功,郁闷死了 BOOL I2C_IOControl( DWORD context, DWORD code, BYTE *pInBuffer, DWORD inSize, BYTE *pOutBuffer, DWORD outSize, DWORD *pOutSize ) 里面定义了一个BYTE *str;然后给他空间,也 ...… 查看全部问答> |
|
访问允许异常(section permission fault) Hi,Dear all, 我在使用Hms30c7202过程中遇到一个难题,我使用的内核是2.6.13.4,大多数能够正常启动运行,个别出现不能启动情况。打印DEBUG信息,非正常设备启动失败,打印: Kernel panic - not syncing: No init found. Try passi ...… 查看全部问答> |
|
安装CE6的SP1出错toolMsmCA(Error):Setup package issue or CoreCon。。。 安装CE6的SP1是出错 “ToolMsmCA(Error):Setup package issue or CoreCon DataStore corrupted:CDeviceSDKInstallShin Add/Remove failed.HR=0x80004005. 我之前装了VS2005。 这几天才装这个,不知怎么出错,安装进度停在Installing the Gene ...… 查看全部问答> |
|
各位,最近在开发一个驱动的时候需要检测内存泄漏,于是自己重载了new/delete,在win32下测了一下没问题,于是决定将其加入到当前的驱动下。可是,问题来了,总是出现LNK2005的错误,我查了一下这个错,应该是连接顺序的问题,出错信息显示在DDK中 ...… 查看全部问答> |
|
市场有一款是uc/os 8 位的代码打印机。 可以接扫描枪,扫入条码,然后按键。打印出一个新条码。 现在想开发这样的东东。谁做过啊? 着急啊。请求指点,合作都可以… 查看全部问答> |
|
近来老板搞了点垃圾产品,在生产时用的是BSOB,但第二点不是翘线就是打不上,很多参数都用过了,不知还有哪里没想到的。求教怎样可以使ASM eagle60 W/B 的BSOB达到最佳。… 查看全部问答> |




