TIMx基础知识
简介
在stm32f103一共有8个定时器,其中两个高级定时器TIM1、TIM8,四个通用定时器TIM2~TIM5,两个基本定时器TIM6、TIM7。
其中高级定时器功能最多(参考手册中给了共21条功能描述),通用定时器次子(16条功能描述),基本定时器功能最少(4条功能描述,只用来进行最基本的计数器工作)。
在使用时根据需求选用对应的定时器。按需选择
通用定时器TIM2~TIM5
通用定时器功能丰富,总结一下就是——一计数器,四通道,两模式+其他功能
- 影子寄存器(ARR、PSC、CCRx),统称存有装载值的寄存器。待更新事件UEV产生后会被更新
- 计时器时钟CK_CNT等于输入时钟CK_INT\预分频系数。通用定时器全挂载在APB1上,默认输入时钟CK_INT=36MHZ*2。 若相应的APB预分频系数是1,定时器的时钟频率与所在APB总线频率一致。否则,定时器的时钟频率被设为与其相连的APB总线频率的2倍。
计数器(TIMx_CNT)
计数器最基本的功能
stm32中定时器的定时功能是由计数器为基础实现的。在使能定时器(TIMx_CR1->0x01,控制器寄存器1第0位置1)后,计数器便开始按照一个时钟频率(分频后的时钟CK_CNT)减或加1的方式进行自动的计数,直到减至零或加至预先设置的值(TIM_ARR的值)时。此时若设置允许更新事件产生(TIMx_CR1->UDIS->0),定时器产生一个更新事件(TIMx_SR->UIF->1)。通过捕获更新事件实现基本定时。
在设置TIMx_ARR(装载器)的值时,若TIMx_CR1寄存器中的自动装载预装载使能位(ARPE)置1,TIMx_ARR先被装入缓存器,等待
更新事件UEV后生效;若ARPE置0,设置ARR寄存器后直接生效。
计数器的三种工作模式——向上,向下,双向计数
向上
计数器从0计数到装载器(TIMx_ARR)的值,溢出后产生更新事件UEV。若不是单脉冲模式,将计数器清零,重新开始新一轮计数。
ARR->0x36,时钟预分频系数为1
向下
在向下模式中,计数器从自动装入的值(TIMx_ARR计数器的值)开始向下计数到0,然后从自动装入的值重新开始并且产生一个计数器向下溢出事件。
ARR->0x36,预分频系数为1
双向
计数器从0开始计数到自动加载的值(TIMx_ARR寄存器)-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器下溢事件;然后再从0开始重新计数。
ARR->0x06,预分频1
//keil5配置定时器
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
TIM_TimeBaseStructure.TIM_Period = arr; //配置ARR寄存器
TIM_TimeBaseStructure.TIM_Prescaler = psc; //预分频系数
TIM_TimeBaseStructure.TIM_Clo