STM32定时器使用详解

/*******************************************************************************

  •   										定时器定时时间计算公式																*
    

*72M下定时值 = (1+预分频TIM_Prescaler)/72 * (1+定时周期TIM_Period) *

  •   TIM的一个时钟计数周期 =	(1/72)us ,
      预分频后要经过(1+预分频TIM_Prescaler)个时钟周期(1/72)us 才会计一次数,
      一共要循环(1+定时周期TIM_Period)次,才会溢出,产生一个TIM中断事件,达到自己想要达到的定时时间
    

*备注:当AHB=72MHz时,APB1的预分频系数必须大于2,因为APB1总线挂的设备都属于低速外设,
它的最大频率只能为36MHz,如果APB1的预分频系数=2,则因为这个倍频器,TIM2–TIM7
仍可以达到72MHz的时钟频率
*******************************************************************************/
void TIM2Init()
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;

TIM_TimeBaseInitStructure.TIM_Prescaler = 7199;  //设置预分频,使每一次的计数周期为100us
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = 9999; //循环10000次,刚好为1s,循环完成后自动重装
TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;	//TIM_CKD_DIV1 即TDTS = Tck_tim,设置死区时间与定时器时钟的比例因子
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;  //重复溢出0次就产生一个中断,如果这个值不设置,而上电时寄存器值
																										  //又是随机的,本来1s产生一次中断,可能变成N秒中断一次
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);  //使能TIM2中断,TIM_IT_Update表示指定中断源是TIM中断源,而不是捕捉中断源

TIM_Cmd(TIM2,ENABLE);  //打开TIM2定时器
//TIM_CtrlPWMOutputs(TIM2,ENALBLE);//操作TIMx_BDTR 刹车和死区时间寄存器的bit15的MOE位,表示是否开启OC和OCN输出

}

你可能感兴趣的:(STM32)