STM32定时器(TIM)之通用定时器

STM32的通用定时器有四个,分别是TIM2, TIM3,TIM4,TIM5,有以下功能:
STM32定时器(TIM)之通用定时器
通用定时器的框图如下:
STM32定时器(TIM)之通用定时器
从图中可以看出,通用定时器TIMx的触发源(计数器时钟的时钟源)有四个:
1、内部时钟(CLK_INT)
2、外部时钟模式1:外部输入引脚(TIx),分别经TIMx_CHx通道传入
3、外部时钟模式2:外部触发输入(ETR)
4、内部触发输入(ITRx):定时器主从模式下由ITRx定义从定时器和主定时器、

下面选取触发源为内部时钟时进行分析:
STM32定时器(TIM)之通用定时器

从上图我们可以看到,基本定时器主要由下面三个寄存器组成。
1、计数器寄存器 (TIMx_CNT)
2、预分频器寄存器 (TIMx_PSC)
3、自动重载寄存器 (TIMx_ARR)
计数器寄存器 (TIMx_CNT)存储的是当前的计数值。预分频器 (TIMx_PSC)为多少个CK_PSC脉冲计数一次,如图192 预分频器的值为1(预分频寄存器默认为0,为不分频),则为两个脉冲计数一次。即为二分频。如果要10000分频,则预分频器的值为1000-1。具体来说若CK_PSC的频率为10MHZ,预分频器值为(10-1),则是每隔1ms计数器计数一次。
STM32定时器(TIM)之通用定时器
自动重载寄存器的数值代表计数的次数,例如当值为59时,计数器若是向上计数模式,则从0计到59时,如图会产生事件U或中断UI,计数器也会被清零而重新计数。
STM32定时器(TIM)之通用定时器

那么内部时钟频率如何确定呢?
通过查找芯片的数据手册可以发现
STM32定时器(TIM)之通用定时器

通用定时器的内部时钟挂在了APB1时钟线上,若内部时钟不分频(CKD=0)的话,则CK_PSC的时钟频率等于APB1的时钟频率。

定时器有如下三种计数模式
递增计数模式:计数器从 0 计数到自动重载值,然后重新从 0 开始计数并生成计数器上溢事件。
递减计数模式:计数器从自动重载值开始递减到 0,然后重新从自动重载值开始计数并生成计数器下溢事件。
中心对齐模式:计数器从 0 开始计数到自动重载值 – 1 ,生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从0 开始重新计数。