[STM32F103]定時器中斷

l 使能定時器時鐘。函數

  RCC_APB1PeriphClockCmd();spa

l 初始化定時器,配置ARR,PSC。code

  TIM_TimeBaseInit();blog

l 開啓定時器中斷,配置NVIC。ip

  void TIM_ITConfig();it

  NVIC_Init();io

l 使能定時器。class

  TIM_Cmd();配置

l 編寫中斷服務函數。date

  TIMx_IRQHandler();

 

l 源代碼:

 1 //Tout(溢出時間)=(ARR+1)(PSC+1)/Tclk
 2 //500ms -> (4999+1)( 7199+1)/72000000 = 0.5s = 500ms
 3  void TIM3_Int_Init(u16 arr,u16 psc)
 4 {
 5      TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
 6     NVIC_InitTypeDef NVIC_InitStructure;
 7 
 8     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //時鐘使能
 9     
10     //定時器TIM3初始化
11     TIM_TimeBaseStructure.TIM_Period = arr; //設置更新裝載值
12     TIM_TimeBaseStructure.TIM_Prescaler =psc;//設置預分頻值
13     TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設置時鐘分割
14     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計數模式
15     TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 
16  
17     TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //容許更新中斷
18 
19     //中斷優先級NVIC設置
20     NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中斷
21     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //0搶佔優先級
22     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //響應優先級
23     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道勢能
24     NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器
25 
26 
27     TIM_Cmd(TIM3, ENABLE);  //使能TIM                     
28 }
29 //定時器3中斷服務程序
30 void TIM3_IRQHandler(void)
31 {
32     if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //檢查是否更新中斷
33         {
34         TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清楚更新中斷 
35         LED1=!LED1;
36         }
37 }
38 int main(void)
39  { 
40     delay_init();  
41     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//搶佔和響應優先級的範圍0~3
42     uart_init(115200);
43      LED_Init();
44     TIM3_Int_Init(4999,7199); 
45        while(1)
46     {
47         LED0=!LED0;
48         delay_ms(200);           
49     }     
50 }
相關文章
相關標籤/搜索