STM32定時器用法
阿新 • • 發佈:2019-01-05
最近在做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中斷一次。