STM32高級定時器用於普通定時,定時周期變長


最近在用stm32定時器控制步進電機,由於普通定時器不夠用,只能把TIM1當普通定時器用,我隨手就把普通定時器的代碼搬過去。

 

void cs_Timer_Init(void)              //TIM1           us級  
{  
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;                                                   
  
  /* Time base configuration */  
  TIM_TimeBaseStructure.TIM_Period = 1000;  
  TIM_TimeBaseStructure.TIM_Prescaler = 71;  
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;  
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
  
  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);  
  
  TIM_ClearITPendingBit(TIM1, TIM_IT_Update);  
  
  TIM_ITConfig(TIM1, TIM_IT_Update , ENABLE);  
}  

編譯下載后,發現步進電機轉的很慢,和原先預計的不一樣,第一反應是懷疑拷貝過來的代碼有問題,核對了一邊發現沒問題,用邏輯分析儀測試了,發現真是定時器慢了,在檢查代碼,發現 TIM_TimeBaseInitTypeDef 結構體中的一個參數 TIM_RepetitionCounter 一直沒用,查查資料,這個值是計數值滿溢出幾次才進入中斷,就試着把這個值也初始化為0,發現步進電機變快了,測量波形,定時器OK。

void cs_Timer_Init(void)              //TIM1           us級  
{  
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;                                                   
  
  /* Time base configuration */  
  TIM_TimeBaseStructure.TIM_Period = 1000;  
  TIM_TimeBaseStructure.TIM_Prescaler = 71;  
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;  
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
  TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;    //修改此處  
  
  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);  
  
  TIM_ClearITPendingBit(TIM1, TIM_IT_Update);  
  
  TIM_ITConfig(TIM1, TIM_IT_Update , ENABLE);  
}  


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM