高级定时器 tim1 tim8 一般中断配置,以防以后忘记

void Timer8_Init(void)  
{  
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  
  NVIC_InitTypeDef NVIC_InitStructure;  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE); //时钟使能  
  TIM_TimeBaseStructure.TIM_Period = (10-1);    //设置自动重装载寄存器周期值  
  TIM_TimeBaseStructure.TIM_Prescaler =(72-1);   //设置预分频值  
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;   //设置时钟分割  
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式  
  TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;//重复计数设置  
  TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); //参数初始化  
  TIM_ClearFlag(TIM8, TIM_FLAG_Update);//清中断标志位  
  TIM_ITConfig(TIM8,TIM_IT_Update, ENABLE);  //|TIM_IT_Trigger
  NVIC_InitStructure.NVIC_IRQChannel = TIM8_UP_IRQn;    
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//先占优先级0级  
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;       //从优先级0级  
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
  NVIC_Init(&NVIC_InitStructure);   
  TIM_Cmd(TIM8, ENABLE);  //使能TIMx外设  
}  

void TIM8_UP_IRQHandler(void)   
{    
   // OSIntEnter();    
    if (TIM_GetITStatus(TIM8, TIM_IT_Update) != RESET)
    {  
         TIM_ClearITPendingBit(TIM8, TIM_IT_Update);
            /***/************中断函数*****************************/
    } 
  // OSIntExit();        
}  

void Timer1_Init(u16 arr,u16 psc)  
{  
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  
  NVIC_InitTypeDef NVIC_InitStructure;  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //时钟使能  
  TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载寄存器周期值  
  TIM_TimeBaseStructure.TIM_Prescaler =(psc-1);//设置预分频值  
  TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割  
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式  
  TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;//重复计数设置设置重复计算次数  达到次数后出发 
  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //参数初始化  
  TIM_ClearFlag(TIM1, TIM_FLAG_Update);//清中断标志位  
  TIM_ITConfig(TIM1,TIM_IT_Update, ENABLE);  //|TIM_IT_Trigger
  NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;    
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//先占优先级0级  
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;       //从优先级0级  
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
  NVIC_Init(&NVIC_InitStructure);   
  TIM_Cmd(TIM1, ENABLE);  //使能TIMx外设  
}  
void TIM1_UP_IRQHandler(void)   
{    
    //OSIntEnter();    
    if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET)
    {  
        TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
         /***********中断服务函数***********/   
    } 
   //OSIntExit();        
}  

注:TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;//重复计数设置设置重复计算次数  达到次数后出发  ,通用定时器与高级定时器的区别配置,重复触发配置

发布了3 篇原创文章 · 获赞 1 · 访问量 207

猜你喜欢

转载自blog.csdn.net/qq_21489487/article/details/103234433