10回答

0收藏

stm32运行一段后不进定时器中断,不知道是什么原因

#开源分享 #开源分享 10203 人阅读 | 10 人回复 | 2014-08-02

目前遇到的问题,设备有一个led灯,程序正常运行时闪烁;主程序中开启看门狗了,LED闪烁是在定时器中断中完成的,但现在LED不闪了,程序还没有复位;我猜测,程序中主程序还在正常运行,只是不能进入定时器中断了;

程序中一共开启了5个中断,中断优先级分组设置为 NVIC_PriorityGroup_0,一共开启5个中断,三个串口中断子优先级分别为1、2、3,一个定时器2中断子优先级为0,一个RTC中断优先级为4;



定时器中断程序如下
void TIM2_IRQHandler(void)
{
  if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)
  {

  //第一层函数使用。
  if(systime2!=0xffffffff)
  systime2++;
  if(systime3!=0xffffffff)
  systime3++;
  if(systime4!=0xffffffff)
  systime4++;
  if(systime44!=0xffffffff)
  systime44++;
  if(systime45!=0xffffffff)
  systime45++;
  //ms延时函数用
  if(systime10 <= 60000)         
  {
      systime10++;                //系统心跳时间累加
  }

  //-------------------------------------------------------
  //-------------------------------------------------------
  //LED灯状态控制
  if((systime5 < led_en) && (led_en>0))
  {
     LED_EN_HIGH();//亮
  }
  else if(led_en<4000)
  {
     LED_EN_LOW(); //灭
  }
  systime5 ++;
  if(systime5 >= (led_en<<1))
  {
     systime5 = 0;
  }
//------------------------------------------------------------------------------
    capture = TIM_GetCapture1(TIM2);
    TIM_SetCompare1(TIM2, capture + CCR1_Val);
  }
  TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);
}



分享到:
回复

使用道具 举报

回答|共 10 个

倒序浏览

沙发

说不定

发表于 2014-8-2 15:03:45 | 只看该作者

我帮你分析一下啊,按照你的分析你程序是运行的,定时器优先级那么高 不可能不会进去定时器,那么有可能就是定时器配合是否正确。
给你的建议:
你能否通过jlink仿真一下看程序跑哪里去了?或者在程序运行中加一些标志如LED闪烁,串口发送数据等判断程序运行到哪儿了呢。
板凳

说不定

发表于 2014-8-2 15:06:52 | 只看该作者

还有就是验证你的看门狗能否工作,就是不去喂狗,系统能否到时间自动复位。
地板

外面的世界很精

发表于 2014-8-2 15:27:15 | 只看该作者

本帖最后由 外面的世界很精 于 2014-8-2 15:28 编辑

测试过看门狗,工作正常;这个问题不是上电就会有,有可能需要连续上电几天后才会出现,这个是最头疼的一点,而且我没有手段重现问题
5#

说不定

发表于 2014-8-2 15:40:06 | 只看该作者

外面的世界很精 发表于 2014-8-2 15:27
测试过看门狗,工作正常;这个问题不是上电就会有,有可能需要连续上电几天后才会出现,这个是最头疼的一点 ...

这个就很头疼了啊!我也没招了,希望你能早点找到问题所在!
6#

ddllxxrr

发表于 2014-8-3 06:18:26 | 只看该作者

这个是优先级没有选对,你把定时器优先级设比定时器高,试下,再有用得着看门狗吗,闭了它
http://shop34182318.taobao.com/
https://shop436095304.taobao.com
7#

外面的世界很精

发表于 2014-8-4 08:55:40 | 只看该作者

ddllxxrr 发表于 2014-8-3 06:18
这个是优先级没有选对,你把定时器优先级设比定时器高,试下,再有用得着看门狗吗,闭了它 ...

没太看明白什么意思?
8#

外面的世界很精

发表于 2014-8-4 08:56:37 | 只看该作者

谢谢各位的关注
9#

cherryxu

发表于 2015-6-27 22:19:58 | 只看该作者

楼主解决了 我有时候也是而且我的中断 也有好多呢  和你 有时候差不多
10#

逍遥L

发表于 2015-6-28 23:41:55 | 只看该作者

路过学习一下
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条