STM32定时器所支持的三种计数模式及计数过程
STM32常规定时器主要包括基本定时器、通用定时器和高级定时器。不论哪一类定时器,都有个共同的计数定时单元,我们把它称之为时基单元。该单元主要由三部分组成:分频模块、计数模块、自动重装载模块。分频模块用来对外来的计数时钟进行分频,这里有个分频计数器,通过它来实现对时钟的分频功能。与之对应的有个分频器寄存器TIMx_PSC,用来配置和存放分频比、分频系数。计数模块用来对来自分频器输出的计数脉冲进行计数。相应的这里有个寄存器计数器寄存器TIMx_CNT,为了把该计数器跟别的计数器区别开来,不妨称它为核心计数器。自动重装载模块用来配合计数器溢出,当计数器溢出时为之赋予初始计数值的功能单元。与之相应的有个自动重装载寄存器TIMx_ARR当自动重装载寄存器TIMx_ARR修改生效后就可以自动地作为计数器的计数边界或重装值。
关于自动重装及自动重装载寄存器TIMx_ARR是个相对比较难理解的地方,尤其关于ARR寄存器数据的含义。我们在看STM32参考手册时,很难一下子理解得很到位,往往需要结合上下文内容反复阅读后去领会。关于计数器的溢出与重装,在手册里只有些零散且并不算清晰的介绍,这里尽力跟大家做些交流,以供参考。当计数器溢出时,自动重装载器为计数器重装计数初始值。自动重装寄存器【ARR】为计数器设置计数边界或初始值,决定计数脉冲的多少或计时周期长短。比如:计数器向上计数时,计到多少发生溢出;向下计数时从多少开始往下计数。平常我们泛泛地说ARR寄存器为计数器提供计数边界或重装值但它的具体含义及使用需要结合计数器的计数模式才能确定。那一起看看STM32定时器所支持的三种计数模式及计数过程。【文中图片可以点击放大观看】
f从上面三种计数模式下的计数动作来看,不同模式下计数器的溢出点并不一样,溢出后重装值也不一样。显然,ARR寄存器里的数据扮演的角色也因不同的计数模式而有所不同。我这里特地就三种计数模式下的溢出与重装汇总成一个表格,以便观察和比较。不难看出,重装值并不一定等于ARR,有时重装值就是0
根据上面的介绍和分析,我们要弄清楚几点:1、对时钟脉冲进行计数以及溢出是计数器的事;2、当计数器发生溢出时对计数器重装初始值是自动重装载器的事;3、ARR寄存器里数据的含义会因计数模式的不同而有所不同;我们弄个实例来看看,以加深对这个溢出与重装的理解。我们来看一个通过高级定时器使用比较输出功能输出指定个数脉冲的实例。r