本文介绍了STM32基本定时器3个重要的寄存器PSC、ARR、CNT,以及缓冲机制和计数细节。
基本定时器的框图
预分频器寄存器(TIMx_PSC)可以在运行过程中修改它的数值,新的预分频数值将在下一个更新事件时起作用。因为更新事件发生时,会把 TIMx_PSC 寄存器值更新到其影子寄存器中,这才会起作用。(该寄存器16位,最大值为2^16-1即表示65536(2^16)分频)
自动重载寄存器及其影子寄存器的作用和上述同理。不同点在于自动重载寄存器是否具有缓冲作用还受到 ARPE 位的控制,当该位置 0 时,ARR 寄存器不进行缓冲,我们写入新的 ARR 值时,该值会马上被写入 ARR 影子寄存器中,从而直接生效;当该位置 1 时,ARR 寄存器进行缓冲,我们写入新的 ARR 值时,该值不会马上被写入 ARR 影子寄存器中,而是要等到更新事件发生才会被写入 ARR 影子寄存器,这时才生效。预分频器寄存器则没有这样相关的控制位,这就是它们不同点。(自动重载寄存器和计数器均为16位,最大值为2^16-1即表示最多计65536(2^16)次)
总结
缓冲:改变PSC或ARR寄存器的值后,不会立即起作用,而是发生更新事件后由各自的影子寄存器将值载入。
TIMx_PSC(预分频器寄存器)只能缓冲,而TIMx_ARR(自动重载寄存器)可通过ARPE 位来选择是否缓冲(ARRE为0时,该值立即生效,没有缓冲。ARRE为1时,具有缓冲功能)
更新事件的产生:
1.由软件产生,将 TIMx_EGR 寄存器的位 UG 置 1,产生更新事件后,硬件会自动将 UG 位清零。
2.由硬件产生,满足以下条件即可: 计数器的值等于自动重装载寄存器影子寄存器的值。
基本定时器的计数器(CNT)是一个递增的计数器,当寄存器(TIMx_CR1)的 CEN 位置 1,即使能定时器,每来一个 CK_CNT 脉冲,TIMx_CNT 的值就会递增加 1。当 TIMx_CNT 值 与 TIMx_ARR 的设定值相等时,TIMx_CNT 的值就会被自动清零并且会生成更新事件。
若ARR的值为9,则CNT需要溢出10次,才生成更新事件。计数器记到自动加载值9后再来一个CK_CNT后计数值的变化:
0__ 1__ 2__ 3__ 4__ 5__ 6__ 7__ 8__ 9__ 0__
第9个数记完之后再来一个脉冲产生溢出和更新事件,粉紫色部分为溢出过程。
由CNT的时序图可以看出上述过程: