今天在调试定时器时,定时器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); //清除中断标志位
}