STM32高級定時器用于普通定時,定時周期變長
最近在用stm32定時器控制步進(jìn)電機(jī),由于普通定時器不夠用,只能把TIM1當(dāng)普通定時器用,我隨手就把普通定時器的代碼搬過去。
voidcs_Timer_Init(void)//TIM1us級
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
/*Timebaseconfiguration*/
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);
}
編譯下載后,發(fā)現(xiàn)步進(jìn)電機(jī)轉(zhuǎn)的很慢,和原先預(yù)計(jì)的不一樣,第一反應(yīng)是懷疑拷貝過來的代碼有問題,核對了一邊發(fā)現(xiàn)沒問題,用邏輯分析儀測試了,發(fā)現(xiàn)真是定時器慢了,在檢查代碼,發(fā)現(xiàn)TIM_TimeBaseInitTypeDef 結(jié)構(gòu)體中的一個參數(shù)TIM_RepetitionCounter一直沒用,查查資料,這個值是計(jì)數(shù)值滿溢出幾次才進(jìn)入中斷,就試著把這個值也初始化為0,發(fā)現(xiàn)步進(jìn)電機(jī)變快了,測量波形,定時器OK。
voidcs_Timer_Init(void)//TIM1us級
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
/*Timebaseconfiguration*/
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);
}