在STM32当中扩展定时范围:单个定时器的定时长度可能无法满足某些应用的需求。通过级联,可以实现更长时间的定时;提高定时精度:能够在长定时的基础上,通过合理配置,实现更精细的定时控制;处理复杂定时任务:适用于需要多个不同定时阶段或复杂定时顺序的应用场景,方便实现更复杂的定时逻辑。换句话说,在STM32当中,我们所应用到的定时器都是16位的定时器,那么怎么提高时钟的精度,改为32位的定时器,这个问题就出来了。举个例子,以频率计为例,我只用只用一个时钟源作为计数器,它顶到天了,也就只能计数到65535(2^16-1)。而你将两个计数器级联之后,我们就有了一个32位的计数器,当我们的主计数器计完数之后,发生中断的时候,从计数器计一个数。周而复始,依此类推。所得到的频率也就越广越精。经过试验,使用TIM2和TIM3作为主从计数器,能测到0.0167Hz~400kHz。而单用TIM3在1kHz以下误差就很差了。
那怎么级联呢?大家可以通过参考手册里面有个详细的原理框图。如下图。
主从定时器级联原理框图
在 STM32 中,主从计数器的运行原理主要是通过主定时器的事件来控制从定时器的操作。主定时器通常按照自身的配置进行计数和产生相关事件,比如更新事件。从定时器则可以设置为响应主定时器的特定事件,如在主定时器更新时开始计数、停止计数、复位计数等。这种主从配置的优势在于能够实现更复杂和精确的定时控制。例如,可以通过主定时器的长周期定时来触发从定时器的短周期操作,从而在不同的时间尺度上协同工作。具体来说,主定时器的计数模式、时钟源、预分频系数、自动重载值等决定了其定时周期和产生事件的时机。从定时器根据主定时器的事件以及自身的配置进行相应的动作。例如,将 TIM2 设为主定时器,TIM3 设为从定时器,并配置 TIM3 在 TIM2 产生更新事件时开始计数。这样,TIM2 的定时周期结束产生更新事件,触发 TIM3 开始计数,实现了主从协同工作。这种主从模式的配置为实现多样化的定时需求提供了灵活的手段,适用于各种需要复杂定时逻辑的应用场景。
配置定时器1为主模式,它可以在每一个更新事件UEV时输出一个周期性的触发信号。在 TIM1_CR2寄存器的MMS='010'时,每当产生一个更新事件时在TRGO1上输出一个上升沿信号。连接定时器1的TRGO1输出至定时器2,设置TIM2_SMCR寄存器的TS='000',配置定时器2 为使用ITR1作为内部触发的从模式。然后把从模式控制器置于外部时钟模式1(TIM2_SMCR寄存器的SMS=111);这样定时器2即可由定时器1周期性的上升沿(即定时器1的计数器溢出)信号驱动。最后,必须设置相应(TIMx_CR1寄存器)的CEN位分别启动两个定时器。这里在TRGO1和ITR1这两个参数是重要的地方,它们就像钥匙和门一样,钥匙是"TRGO1",门是ITR1。只有两个都通了,时钟才能级联。程序就是下面这几句,这里我用的是TIM2作为主时钟,TIM3作为从时钟。
那么完整的时钟配置程序会是什么样的呢?
那么换其他的主从定时器怎么办呢?这就得继续调整参数TIM_TS_ITRx了,这里参考手册里面有个表格供大家参考。
好了,今天的STM32就聊到这里,大家多练多消化。反正我就单纯换了个主从顺序就晕晕乎乎换了半天。我的天啊!
欲知后事如何,且听下回分解。OVO......