资深版主 
   
	- 积分
 - 10585
 
        - 金钱
 - 10585 
 
       - 注册时间
 - 2017-2-18
 
      - 在线时间
 - 1917 小时
 
 
 
 | 
 
有用户自己使用TIM3改为TIM2的没问题,但是使用TIM5的更新中断出现问题 ,找了好久找不到原因,就改了这个程序 
程序基于中断实验测试程序修改,使用TIM5的更新中断,在更新中断中取反LED来提示进入了TIM5的更新中断 
初始化代码和中断服务程序如下 
[mw_shl_code=c,true]//通用定时器5中断初始化 
//这里时钟选择为APB1的2倍,而APB1为36M 
//arr:自动重装值。 
//psc:时钟预分频数 
//这里使用的是定时器5! 
void TIM5_Int_Init(u16 arr,u16 psc) 
{ 
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure; 
        NVIC_InitTypeDef NVIC_InitStructure; 
 
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); //时钟使能 
         
        //定时器TIM5初始化 
        TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值         
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim 
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式 
        TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位 
  
        TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE ); //使能指定的TIM5中断,允许更新中断 
 
        //中断优先级NVIC设置 
        NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;  //TIM5中断 
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级 
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级 
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能 
        NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器 
 
 
        TIM_Cmd(TIM5, ENABLE);  //使能TIMx                                          
} 
//定时器5中断服务程序 
void TIM5_IRQHandler(void)   //TIM5中断 
{ 
        if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)  //检查TIM5更新中断发生与否 
                { 
                TIM_ClearITPendingBit(TIM5, TIM_IT_Update  );  //清除TIMx更新中断标志  
                LED1=!LED1; 
                } 
}[/mw_shl_code] 
 
 
 |   
 
 
 
 |