简介
定时器的主要功能是用来定时,不过STM32中有多种类型的定时器-----基本定时器、通用定时器、高级控制定时器,以STM32F103ZET6为例,有有 8 个16位定时器,其中 TIM6 和 TIM7 是基本定时器,TIM2/3/4/5是通用定时器 ,TIM1/8是高级定时器,本篇主要讲基本定时器。
寄存器
- TIM6 和TIM7 控制寄存器 1(TIMx_CR1)
- TIM6 和TIM7 控制寄存器 1(TIMx_CR1)
- TIM6 和TIM7 控制寄存器 1(TIMx_CR1)
- TIM6 和TIM7 状态寄存器(TIMx_SR)
- TIM6 和TIM7 事件产生寄存器(TIMx_EGR)
- TIM6 和TIM7 计数器(TIMx_CNT)
- TIM6 和TIM7 计数器(TIMx_CNT)
- TIM6 和TIM7 计数器(TIMx_CNT)
功能框图
- 这里的CK_CNT也就是计数器时钟,是TIMxCLK经过PSC预分频器分频后得到的,PSC预分频器可以设置的分频范围为: 1~65536 ,具体计算方式为: CK_CNT=TIMxCLK/(PSC+1),注意这里的PSC要加一,因为不可能有0分频存在,至少是1分频
- 对于基本定时器只能向上计数,也就是只能从小加到大,加到多少主要由自动重装载寄存器 ARR决定,ARR是一个16位的寄存器,里面装着计数器能加到的最大值,如果计数器加到了这个值并且使能了中断的话就会产生溢出中断(更新中断)
- 由于基本定时器向上计数是从0开始的,因此计数的初始值为0,所以我们设置ARR的值的时候要减去1,也就是ARR-1,比如我们要计数十次,那么久设置ARR的值为9,因为计数是从0开始的,0计数到9就是计数了十次
定时时间的计算
每次计数加1的时候所需要的时间为:1/CK_CNT,而CK_CNT=TIMxCLK/(PSC+1),对于STM32F1系列,基本定时器的TIMxCLK的频率为72MHz,为了方便计算,我们把PSC+1设置成72,刚好可以得到一个整数的CK_CNT,这时候每一次计数+1所需的时间为:1us,一微秒,所以如果要计时1ms,就把ARR的值设置成999,也就是1us计数一千次
基本定时器的结构体
typedef struct {
TIM_Prescaler // PSC分频因子
TIM_CounterMode // 计数模式,基本定时器只能向上计数,不用设置
IM_Period //自动重转载寄存器ARR的值
TIM_ClockDivision // 外部输入时钟分频因子,基本定时器没有,其他都有
TIM_RepetitionCounter //