STM32定时器基本计数原理解析

概述
stm32的tim定时器分为三类:基本定时器、通用定时器和高级定时器。从分类来看就知道stm32的定时器功能是非常强大的,但是,功能强大了,软件配置定时器就相对复杂多了。很多初学者甚至工作了一段时间的人都不知道stm32最基本的计数原理。
虽然stm32定时器功能强大,也分了三类,但他们最基本的计数部分原理都是一样的,也就是我们常常使用的延时(或定时)多少us、ms等。
接下来我会讲述关于stm32最基本的计数原理,详细讲述如何做到(配置)计数1us的延时,并提供实例代码供大家参考学习。
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
#definetim4_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的值。

5G版iPhone的到来将会给我们带来什么样的惊喜
近日新闻:三星或关闭天津工厂;联电停止研发12nm以下工艺
剖析ST高精度MEMS倾角仪,竟然用上了机器学习?
AR+ADAS 如何改变汽车行业
RFID技术在新零售上可以如何应用上
STM32定时器基本计数原理解析
先进的清洗技术如何助力先进节点实现最佳晶圆良率
自力式压力调节阀的材料工作压力与温度介质
三星OLED屏幕再出新品 有望获2019年版iPhone采用
苹果公司iPhone中国市场销量低迷 需要专门为中国市场设计一款新手机
漏洞挖掘工具afrog软件简介
Mobileye公布最新自动驾驶方案
我国5G手机商用正式开启,4G手机迎来降价潮
晶振电路中C1,C2电容的选择问题
OPPO成为第一批搭载骁龙888的旗舰手机
USDT是否真的具备稳定币的特性
华为畅享10 Plus全视屏配超大电量 爽玩一整天
新国标并非唯一换车动力,电动两轮车的智能化与网联化同样功不可没
高清监控要选择监控专用硬盘的原因是什么?如何优化存储空间
利用FPGA式原型板开发新型SOC实验平台