有三个基础的寄存器:
计数器运行在TIMx_PSC预分频后的CK_CNT,前提是TIMx_CR1 寄存器里的CEN(Counter enable)位是1。只要CEN是1,计数器就开始计数。
如果TIMx_CR1 寄存器里的ARPE(Auto-reload Enable)位是1的话,在每次更新事件(UEV,update event)发生的时候TIMx_ARR寄存器的数值就会装载到计数器内;否则的话,只装载1次。
预分频,即预分频的比率:就是将原来的(n+1)个CK_PSC信号视为1个时钟信号。所以实际上,计数器的时钟信号频率CK_CNT = fCK_PSC / (PSC[15:0] + 1)。
你可以在任意时刻修改TIMx_PSC,但是只有在UEV事件发生时,新的预分频比率才会被使用:
这里可以看出与预分频相关的有3个寄存器:
自动重载寄存器,和它相关的主要是要不要缓存TIMx_ARR。
当TIM1_CR1寄存器里的ARPE(Auto-reload preload enable)位是0时, TIMx_ARR不会被缓冲,所以会被立即更新:
修改TIMx_ARR -> 立即修改自动重载的预加载寄存器 -> 立即更新自动重载的影子寄存器
当TIM1_CR1寄存器里的ARPE(Auto-reload preload enable)位是1时, TIMx_ARR会被缓冲,所以不会被立即更新:
修改TIMx_ARR -> 立即修改自动重载的预加载寄存器 -> 在UEV事件时更新自动重载的影子寄存器
此模式下,计数器从0加到TIMx_ARR,然后触发一个overflow事件并从0开始重新计数。
UEV事件的触发与否:
当UEV事件发生时,会造成:
13. Advanced-control timers (TIM1 and TIM8)
原文:https://www.cnblogs.com/qiyuexin/p/12720617.html