zoukankan      html  css  js  c++  java
  • 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); //清除中断标志位

    }

  • 相关阅读:
    clickhouse使用docker安装单机版
    nacos使用docker安装单机版
    第三周学习进度
    第二周学习进度
    二柱子四则运算定制版
    课堂测试小程序
    学习进度
    阅读计划
    自我介绍
    寻找水王
  • 原文地址:https://www.cnblogs.com/hexia7935/p/14601041.html
Copyright © 2011-2022 走看看