定时器和计数器在计算机系统中,尤其是工业控制系统中有着重要的作用。定时器和计数器的差别仅限于用途不同。定时器从本质上来讲其实就是一个计数器,每收到一个脉冲,计数器就会加/减
1,如果脉冲的周期固定,那么脉冲数和时间成正比,这样就可以根据脉冲的固定周期将计数器作为计数器使用,比如单片机系统里的晶振产生的脉冲,就是一个脉冲周期固定的脉冲,根据脉冲的数量就可以计算时间;如果脉冲信号是无规律的,那么这个脉冲信号理想状况下可以作为一个计数器。
1、以减法计数器为核心部件的定时器/计数器
和大多数人喜欢使用倒计时的方法一样,大多数简单定时器/计数器的核心部件为减法计数器。减法计数器的特点是用一个计数值作为基数,然后每接收到一个脉冲就减1,当计数器的数值为
0时就按事先设定的逻辑去触发事件,这就是简单定时器/计数器中断的思路。
下图就是一个以计数器为核心部件的定时器/计数器的原理图
预置计数基数通过总线存入预置数锁存器并送去减法器,当gate信号为
“1”,时,减法计时器对脉冲信号clk进行减法计数。当减法计数器的值被减到0时,在
out输出计数结束或计数时间时间到信号。
2、以加法计数器为核心部件的定时器/计数器
加法计数器应用更加广泛,所以在比较复杂的计数器里面一般都会使用加法计数器作为核心部件,简单的像51单片机只有一种加法计数模式,复杂点的像stm32单片机不仅有向计数,还有向下计数,还有双边计数等多种模式,都离不开加法器。下图是以加法计数器为核心部件的定时器/计数器
为了能用一个计数器产生多个计数结果或者定时时间到信号,这种计数器/定时器通常会配置了多个预置数寄存器,但是多个锁存器中只有一个用来为计数器提供预置计数,而其他的只是对计数器的计数值进行监视,所以这些寄存器通常被叫做配置锁存器(寄存器)。在计数器收到脉冲进行计数的同时,当计数器的值与某个配置锁存器的预置数相等时,会产生一个计数到或者定时时间到的信号。由于有多个配置锁存器所以在计数过程中可能会产生多个时间节点,以使程序在这多个节点上实现多个功能。
为了使程序可以随时捕获计数器计数过程中的数据,还可以配备若干个捕获寄存器,这些捕获寄存器可以随时捕获计数器在某个时刻的计数值。
最后贴上一张STM32单片机的比较
/捕获1的主电路帮助理解