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