小明妈妈跟小明说:“10分钟后,你再不给我去做作业我就揍你!”,接着,小明妈妈看着手表,1秒钟数1下,0,1,2,3,……,599。看看小明有没有做作业,根据情况判断要不要揍他。
接着,小明妈妈又从0数起,到599,继续看看小明有没有做作业…… ……再数数…… ……
于是,小明妈妈就是一个每隔10分钟监视一下小明有没有做作业的定时器,手表,就是小明妈妈定时器的时钟,小明妈妈数600个周期后(0~599),触发定时器中断,定时器中断里,判断小明有没有去做作业,没有,就揍他,有,就啥事也不做。
STM32上的定时器,也是跟小明妈妈一样,是通过数数计时的,比如,数1个数是1秒,从0数到599,就是600秒(10分钟)了。
STM32上的数数,可以正着数,从0~599,也可以倒着数,从599~0,还可以先正着数后倒着数,当然,小明妈妈也是可以的。
那能不能不数600个数?数别的?可以的,只需要设置就行了。
还能不能不1秒数一次,长一点或者短一点?也是可以的,只需要设置就行了。
RM0033告诉我们,STM32F207有8个小明妈妈,TIM1~TIM8,资源非常丰富,当然,它也不仅仅只能用于数数,功能非常强大。
为什么叫基本定时器呢?因为它们不仅用来计时,还有其他非常强大的功能,如PWM,脉宽测量等等。定时器,只是它的基本功能。
我们今天,只讲数数功能,数到一定数后,就触发定时器中断,处理事件。换句话说,每隔一段特定的时间,触发特定的事件。
我们就来做一个一秒的定时器吧,每隔1秒打印定时器开启时间。
先打开Stm32CubeMx,新建一个工程,不懂建工程的请参考《STM32CubeMx 创建第一个工程》。
建完之后,看TIMx(x=1,2,3……),这就是定时器。
这里面有各种需要设置的地方,Slave Mode、Trigger Source、Clock Source、等等等。
这是啥?看不懂,怎么办(黑人问号)???
没关系,问一下RM0033,找到相关的部分,看介绍。
它告诉我们,定时器包含16Bit自动重载计数器,由可编程预分频器组成。抱歉,翻译不是我的特长,大家大概看得懂意思就行啦。它还告诉我们,这些定时器有很多作用,像量输入信号脉冲宽度或者输出波形等等。还讲了脉宽测量的范围,从微秒级到毫秒级的。还说这几个小明妈妈是完全独立的,不过她们可以同步,具体的要参考一下Section 13.3.20
点到13.3.20,定时器可以连在一块,具体参考14.3.15。
点到14.3.15,当一个定时器配置成Master Mode时,它能够复位,开始,停止,或者作为另外一个被配置成Slave Mode的定时器的时钟。
由此可见,Slave Mode,主要用在两个以上的定时器上,具体有兴趣的朋友可以继续往下看资料,这里就不截图出来。
它有Reset Mode、GateMode、Trigger Mode、External Clock Mode几种模式。
我们这章节,不需要用到Slave Mode,所以,就选择 Disable。
Trigger Source 选择,里面有ITR0、1、2、3等项目,怎么选择呢?
ClockSource 选择,里面有Internal Clock,ETR,怎么选择呢?
Channel1、2、3、4,以及以下的,如何设置呢?
先来看一个图:
图中标的1、2、3,就是Timer的ClockSource。
图中标的4、5,是定时器的其它功能,如Pwm,脉宽测量等功能,我们这节课暂时不需要关注它。
再来看看 Clock selection 的说明: