1. 程式人生 > >STM32定時器用法

STM32定時器用法

       最近在做STM32的PT2262解碼,網上查到一些用微控制器解碼的程式,想對應地修改成STM32的程式,在定時器這裡遇到了困難。目前的方案是打算用定時器計時,用示波器測量到接收到的訊號的窄脈衝時間和寬脈衝時間,設定200us定時一次。在程式中用到了TIM2和TIM3,程式程式碼設定如下:

void TIM2_Config(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_DeInit( TIM2);                              //復位TIM2定時器
    //TIM2 configuration /
    TIM_TimeBaseStructure.TIM_Period = 2000;        // 最大計數值
    TIM_TimeBaseStructure.TIM_Prescaler = 36000-1;    // 時鐘預分頻
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;  // 時鐘分割
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //計數方向向上計數
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

    //Clear TIM2 update pending flag[清除TIM2溢位中斷標誌] //
    TIM_ClearFlag(TIM2, TIM_FLAG_Update);
   // Enable TIM2 Update interrupt [TIM2溢位中斷允許]
    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
   // TIM2 enable counter [允許tim2計數]
    TIM_Cmd(TIM2, ENABLE);              //開啟時鐘
}

       TIM_Period的大小實際上是表示經過多少次計數,才會發生一次中斷或更新。時鐘頻率=72MHz/(時鐘預分頻+1),說明當前設定的Prescaler,直接決定定時器的時鐘頻率,就是說一秒鐘能計數多少次。如果計算出來的時鐘頻率是2000,即一秒鐘能計數2000次,而此時如果TIM_Period為4000,即4000次計數後會中斷一次,由於時鐘頻率是一秒鐘計數2000次,那麼實際上是經過2秒,時鐘會中斷一次。

在實際程式中,設定TIM_TimeBaseStructure.TIM_Period=7199;內部TIM_TimeBaseStructure.TIM_Prescaler= 1;    這樣得到的就是200us中斷一次。