stm32通用定时器
TIM通用定时器配置步骤:
1.配置TIM时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
2.定时器基本配置
 void TIM2_Configuration(void)
 {
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
     //  TIM_OCInitTypeDef  TIM_OCInitStructure ;
     TIM_DeInit(TIM2);                              //复位TIM2定时器
         
     /* TIM2 configuration */
     TIM_TimeBaseStructure.TIM_Period = 5;        // 2.5ms     
     TIM_TimeBaseStructure.TIM_Prescaler = 36000;    // 分频36000       
     TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;  // 时钟分频  
     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //计数方向向上计数
     TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
     /* Clear TIM2 update pending flag[清除TIM2溢出中断标志] */
     TIM_ClearFlag(TIM2, TIM_FLAG_Update);
     /* Enable TIM2 Update interrupt [TIM2溢出中断允许]*/
     TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); 
     /* TIM2 enable counter [允许tim2计数]*/
     TIM_Cmd(TIM2, ENABLE);       
 }
TIM_Period设置了在下一个更新事件装入活动的自动重装载寄存器周期的值。它的取值必须在0x0000和0xFFFF之间。
TIM_Prescaler设置了用来作为TIMx时钟频率除数的预分频值。它的取值必须在0x0000和0xFFFF之间。
TIM_ClockDivision的作用是做一段延时,一般在特殊场合的时候会用到,可不关心。
TIM_CounterMode选择了计数器模式。
     TIM_CounterMode_Up
     TIM向上计数模式
     TIM_CounterMode_Down
     TIM向下计数模式
     TIM_CounterMode_CenterAligned1   TIM中央对齐模式1计数模式
     TIM_CounterMode_CenterAligned2   TIM中央对齐模式2计数模式
     TIM_CounterMode_CenterAligned3   TIM中央对齐模式3计数模式
单片机时钟频率72MHz,APB1 二分频36MHz,故TIM2自动2倍频至72MHz,故定时器中断频率为72000000/36000/5=400Hz
3.使能定时器中断TIM_Cmd(TIM2, ENABLE);
4.配置NVIC。
     NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;
     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;  
     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
     NVIC_Init(&NVIC_InitStructure);
5.写中断函数
void TIM2_IRQHandler(void)
{
......//中断处理
}
