今天在調試定時器時,定時器3出現了自動停止工作的問題,中斷設置是每過一秒,進一次中斷,相應標志位+1,然后每次都是在標志位=4時停止工作,但是有時候又能正常工作,暫時未解決。
在調試時,發現一個有趣的現象,本次項目我同時配置了定時器4,初始化后是DISABLE未使能狀態,但是開始運行,定時器還是會進一次中斷,相應的標志位+1,后面不能繼續增加。
motor_run_time這個標志位在程序啟動后會進一次中斷導致+1,而我的定時器並未使能。
我的相關代碼是
初始化部分代碼:
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); //允許定時器4更新中斷
TIM_Cmd(TIM4, DISABLE); //關閉定時器4
//定時器4中斷服務函數
void TIM4_IRQHandler(void)
{
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) //溢出中斷
{
motor_run_time++;
}
TIM_ClearITPendingBit(TIM4, TIM_IT_Update); //清除中斷標志位
}
在參考http://www.51hei.com/bbs/dpj-40940-1.html后,我對代碼進行了一些調整,解決了這個自動進一次中斷的問題
增加部分: TIM_ClearITPendingBit(TIM4, TIM_IT_Update); //清除中斷標志位
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); //允許定時器4更新中斷
TIM_Cmd(TIM4, DISABLE); //關閉定時器4
//定時器4中斷服務函數
void TIM4_IRQHandler(void)
{
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) //溢出中斷
{
motor_run_time++;
}
TIM_ClearITPendingBit(TIM4, TIM_IT_Update); //清除中斷標志位
}