最近用STM32F103做点东西,设置了定时器中断,出现了定时器一直在正常工作但是主函数不能运行的情况,检查时发现标志位清除是在进入定时器中断函数的一开始就执行清除,查询资料发现有时会出现一些情况导致这个标志位没有清掉,类似于又一次被设置上了。
解决办法
在定时器中断函数内部代码的最后再次对标志位进行清除。
实际测试效果良好,主函数可以正常运行了。
void TIM3_IRQHandler(void) //TIM3中断{if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否{TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志 //这里加入要执行的代码}TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx更新中断标志 (再清一次防错)}