您的位置 首页 观点

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

STM32定时器基本计数原理解析-STM32的TIM定时器分为三类:基本定时器、通用定时器和高级定时器。从分类来看就知道STM32的定时器功能是非常强大的,但是,功能强大了,软件配置定时器就相对复杂多了。很多初学者甚至工作了一段时间的人都不知道STM32最基本的计数原理。

概述

STM32TIM守时器分为三类:根本守时器、通用守时器和高档守时器。从分类来看就知道STM32的守时器功用是十分强壮的,可是,功用强壮了,软件装备守时器就相对杂乱多了。许多初学者乃至作业了一段时刻的人都不知道STM32最根本的计数原理。

尽管STM32守时器功用强壮,也分了三类,但他们最根本的计数部分原理都是相同的,也便是咱们常常运用的延时(或守时)多少us、ms等。

接下来我会叙述关于STM32最根本的计数原理,具体叙述怎么做到(装备)计数1us的延时,并供给实例代码供咱们参阅学习。

TIM计数原理描绘

守时器能够简略的了解为:由计数时钟(体系时钟或外部时钟)一个一个计数,直到计数至咱们设定的值,这个时分发生一个事情,告知咱们计数到了。

上面简略的描绘懂了之后便是需求了解它们每一过程的细节,比方:供给的时钟频率是多少、分频是多少等。

根本TIM框图:

pIYBAFwkjUCAFy2YAABqaAo5PmQ987.jpg

通用TIM框图:

o4YBAFwkjWyAXF3BAAEi55IQn58632.png

上面两图截取“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时钟

o4YBAFwkjWyAD_lAAAB9-U0Nty0644.png

该函数坐落bsp.c文件下面;

要点留意:

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

B.匹配对应时钟。

比方:RCC_APB2外设不要装备在RCC_APB1时钟里边

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

2.TIM装备

o4YBAFwkjW2AG2QyAACHGOVoELo087.png

该函数坐落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(奇妙)延时函数

o4YBAFwkjW6AM_EgAACAct0GXmI019.png

该函数坐落timer.c文件下面;

上图一个while循环便是1us的时刻;上面的一些作业便是装备守时器作业一个周期的时刻为1us,这儿延时N奇妙就应该很好了解了; 其实还有一个函数延时N毫秒,很简略,不描绘。

守时中止(拓宽)

“守时中止”功用是根据前面基础上进行了一个拓宽,增加了计数周期就中止的功用。

笔者独自供给了一个实例:守时1ms中止一次(两工程差异在于时刻不是1us,1us中止一次时刻太短);

在软件上首要便是增加敞开TIM中止、装备NVIC、增加TIM中止函数;

1.使能TIM中止

o4YBAFwkjW6ABDA6AACiScmKL1U074.png

该函数坐落(守时中止工程)timer.c文件下面;

功用:使能TIM中止。

2.装备NVIC中止操控器

o4YBAFwkjW-AC5aPAAB83ubSKcU289.png

该函数坐落(守时中止工程)bsp.c文件下面;

功用:装备TIM中止操控。

3.中止函数

o4YBAFwkjXCAScI0AAB29WPDDhs306.png

该函数坐落(守时中止工程)stm32f4xx_it.c文件下面;

功用:守时周期到进入该中止函数。其中有一个计数减,适当于咱们延时工程中while延时N的值。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/guandian/346196.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部