STM32的通用定時器的配置

      STM32的通用定時器爲:TIM2、TIM3、TIM4和TIM5

      在使用通用定時器時利用庫函數直接設置定時器如下:

1.  使能定時器TIM_X的時鐘:(X=2、3、4、5)

      RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIMX,ENABLE);

2.  計算要定時的時間,根據定時時間來設定分頻數和最大計數值(以向上計數爲例子),其中計算關係如下:

     系統時鐘(一般爲72MHZ =定時器分頻數 *計數值

     假如分頻數爲7200,則定時器時鐘爲:72MHZ/7200=10KHZ,定時器每次計數時間間隔爲1/10000秒,假如定時1秒,則要計數10000次,因此計數器的最大計數值爲9999,因爲計數器從零開始計數。

3.  將計算好的分頻數和計數值分別賦值以上面定時爲例,如下:

    /自動重裝的計數值 

    TIM_TimeBaseStructure.TIM_Period = (10000 - 1);

    // 這個就是預分頻係數

    TIM_TimeBaseStructure.TIM_Prescaler =7200 ;

    //數字濾波器,定時的時候不涉及此功能,爲零即

    TIM_TimeBaseStructure.TIM_ClockDivision = 0;

    //計數模式選擇,此處設置爲向上模式

    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;

    //定時基本設置((X=2、3、4、5)

    TIM_TimeBaseInit(TIMX, &TIM_TimeBaseStructure);

    //清除定時器X的中斷溢出標識

    TIM_ClearITPendingBit(TIMX, TIM_IT_Update);

    //開定時器X溢出中斷

    TIM_ITConfig(TIM5, TIM_IT_Update, ENABLE);

    //計數器使能,開始工作

    TIM_Cmd(TIM5, ENABLE); 

    到此通用定時器的定時功能配置完成,以上配置代碼可寫入

void TIMX_Init(void)函數中,函數名自己可變。別忘了在函數中的第一句寫入:TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

4.  中斷配置,這個按照下面的函數複製即可

    void NVIC_Configuration(void)//定時器中斷配置

   {

      NVIC_InitTypeDef NVIC_InitStructure;

      NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);

      NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;

      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

      NVIC_Init(&NVIC_InitStructure);

}

5.   在stm32f10x_it.c添加定時器TIMX的中斷函數:

    void TIM5_IRQHandler(void)

   {

     //如果定時器產生了中斷(X=2、3、4、5)

     if (TIM_GetITStatus(TIMX, TIM_IT_Update) != RESET)

     {

      //這是你要完成的事情和相關判斷,自己去寫

     }

   //完成事情和判斷後,清除中斷 

   TIM_ClearITPendingBit(TIM5, TIM_IT_Update);

  }

到此,定時器定時中斷功能實現了

 

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