高級定時器 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;//重複計數設置設置重複計算次數  達到次數後出發  ,通用定時器與高級定時器的區別配置,重複觸發配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章