STM32f103c8t6的定時器配置定時中斷

//時間計算公式

Tout = ((arr+1*(psc+1))/Tclk ;

其中:
 Tclk:定時器的輸入時鐘頻率(單位MHZ)
 Tout:定時器溢出時間(單位爲us)

  .TIM_Period = arr;           eg;4999
  .TIM_Prescaler = psc;        eg:7199

  Tout = ((4999+1)×(7199+1))/72 = 500000us = 500ms    。


/*
1,時鐘使能
2,配置預分頻、自動重裝值和重複計數值
3,清除中斷標誌位(否則會先進一次中斷)
4,使能TIM中斷,選擇中斷源
5,設置中斷優先級
6,使能TIMx外設

arr:自動重裝值  
psc:時鐘預分頻數  
*/
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(      //使能或者失能指定的TIM中斷  
    TIM1,            //TIM1  
    TIM_IT_Update  | //TIM 更新中斷源  
    TIM_IT_Trigger,  //TIM 觸發中斷源   
    ENABLE           //使能  
    );  
    
  //設置優先級  

  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)   //TIM1中斷
{
	if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) //檢查指定的TIM1中斷髮生與否:TIM1 中斷源 
	{
	   TIM_ClearITPendingBit(TIM1, TIM_IT_Update);  //清除TIMx的中斷待處理位:TIM1 中斷源 
	   
	   /* 這裏寫中斷 */
	
	}
}



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