STM32的定时器定时时间计算(计数时间和中断定时时间)
时基单元
可编程高级控制定时器的主要部分是一个16位计数器和与其相关的自动装载寄存器。这个计数器可以向上计数、向下计数或者向上向下双向计数。此计数器时钟由预分频器分频得到。 计数器、自动装载寄存器和预分频器寄存器可以由软件读写,即使计数器还在运行读写仍然有效。 时基单元包含:
● 计数器寄存器(TIMx_CNT)
● 预分频器寄存器 (TIMx_PSC)
● 自动装载寄存器 (TIMx_ARR)
● 重复次数寄存器 (TIMx_RCR)
自动装载寄存器是预先装载的,写或读自动重装载寄存器将访问预装载寄存器。根据在TIMx_CR1寄存器中的自动装载预装载使能位(ARPE)的设置,预装载寄存器的内容被立即或在每次的更新事件UEV时传送到影子寄存器。当计数器达到溢出条件(向下计数时的下溢条件)并当TIMx_CR1寄存器中的UDIS位等于0时,产生更新事件。更新事件也可以由软件产生。随后会详细描述每一种配置下更新事件的产生。 计数器由预分频器的时钟输出CK_CNT驱动,仅当设置了计数器TIMx_CR1寄存器中的计数器使能位(CEN)时,CK_CNT才有效。(更多有关使能计数器的细节,请参见控制器的从模式描述)。 注意,在设置了TIMx_CR寄存器的CEN位的一个时钟周期后,计数器开始计数。 预分频器描述预分频器可以将计数器的时钟频率按1到65536之间的任意值分频。它是基于一个(在TIMx_PSC寄存器中的)16位寄存器控制的16位计数器。因为这个控制寄存器带有缓冲器,它能够在运行时被改变。新的预分频器的参数在下一次更新事件到来时被采用。
当发生一个更新事件时,所有的寄存器都被更新,硬件同时(依据URS位)设置更新标志位(TIMx_SR寄存器中的UIF位)。
● 重复计数器被重新加载为TIMx_RCR寄存器的内容。
● 自动装载影子寄存器被重新置入预装载寄存器的值(TIMx_ARR)。
● 预分频器的缓冲区被置入预装载寄存器的值(TIMx_PSC寄存器的内容)。
那么计数时间 = (1+TIM_Prescaler )/72M)*CNT ,即计数脉冲时间周期*脉冲时间次数。
针对中断,则会设置TIM_TimeBaseStructure.TIM_Period,该值在计数达后会产生一次溢出中断
那么溢出中断的时间计算为:((1+TIM_Prescaler )/72M)*(1+TIM_Period )。
使用定时器,有计数模式的 则是按照取出定时器计数值计算。(特别注意:配置的TIM_Period不能小于要达到的CNT计数值,因为定时器在达到TIM_Period值后重装计数器值,那么则无法用计数形式得到时间值)
有使用中断的,则是以中断默认值计算。