stm32定时器初始化后自动进入一次中断问题

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

}

posted on 2021-03-31 13:28  chaina_家长  阅读(1711)  评论(0编辑  收藏  举报