• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

定时器中断代码为什么一直因看门狗复位?

小白爱32 2018-10-27 浏览量:1113


如下图,定时器中断代码如下,定时器中断时间0.5S,独立看门狗重装载值0x90,看门狗的倒数时间大于0.5S,


为什么我在定时器中断中喂狗,明明喂狗时时间 500ms  小于  看门狗复位时间(4*64*144/40=921.6ms​),程序却一直复位?led0闪烁?谢谢!


1.png

2.png

3.png

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 你在程序开始运行的地方打一个断点,然后查看一下RCC->CSR的值,确定一下这个复位是否由看门狗引起的

    另外,这个看门狗定时的时间好像有问题

    • 发布于 2018-10-28
    • 举报
    • 评论 2
    • 1
    • 0
小白爱32 回复了 chen0000009:兄弟说得很在理,定时时间应该计算为64*144/40=230ms<500ms定时时间,应该是在进入中断前就复位了 回复
小白爱32 回复了 小白爱32:前边230ms是看门狗溢出时间 回复

其他答案 数量:12
  • 你怎么知道是一直在复位呢?

    闪烁很正常,进timer中断,喂了狗就反转led,当然要闪烁。

    没觉得哪里有问题呀

    • 发布于2018-10-27
    • 举报
    • 评论 2
    • 2
    • 0
小白爱32 回复了 robe_zhang :因为led0闪烁,led0=0为点亮,我在其他地方没有操作,只有主循环里边。led1在中断中翻转,也是闪烁的 回复
FEItwo 回复了 robe_zhang :复位的时候灯会闪烁的,代码循环可能存在问题 回复

  • 我觉得你把while里面的led赋值去掉,一个语句也不要,这样,开机初始化led熄灭,如果程序运行过程led一直闪烁,那就正常。如果led不闪,那就有问题。
    • 发布于2018-10-27
    • 举报
    • 评论 1
    • 1
    • 0
小白爱32 回复了 robe_zhang :我在主循环放个灯就是专门用来测试有没有复位的,不复位的话主循环灯一直亮,复位了的话灯会表现出闪烁 回复

  • led=0的时候为点亮,led=1的时候为熄灭
    • 发布于2018-10-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 按照楼主的程序意图,程序启动后LED0点亮,在定时器中断中翻转LED1以及喂狗,但实际上出来的效果是LED0闪烁,从程序的流程来看,如果发生复位,LED0应该会一直亮着(因为复位后系统重启动,又把LED0点亮,中间灭的时间人眼是反应不过来的)。

    我建议检查下LED1这个宏定义是否映射到了LED0的引脚上了。

    • 发布于2018-10-27
    • 举报
    • 评论 1
    • 0
    • 0
小白爱32 回复了 赤心木zqw :你看我看门狗溢出时间是不是算错了,宏定义没有问题的 回复

  • 中断里面有反转LED,不代表复位,你可以在主函数初始亮灯,然后中断就关闭,如果运行着灯亮了就是代表没喂狗复位了
    • 发布于2018-10-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 你的led闪烁是正常的吧,在你的程序中不是使用了定时器的中断信号吧led的状态取反了么?????
    • 发布于2018-10-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 检测定时器中断向量是否正确初始化(安装)或系统复位时打印复位源判断何种原因复位。
    • 发布于2018-10-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 你的复位是怎么测出来的呢,可能并不是复位,只是LED灯的闪烁
    • 发布于2018-10-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 你先用串口确认一下复位是否发生了,比如在main函数前端加入一行语句打印“系统复位了”,然后在定时器中断中再加入一句“定时器中断了”,排查一下是看门狗的问题还是定时器中断的问题。

    • 发布于2018-10-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个应该是没有复位的,看你的代码是可以正常执行的
    • 发布于2018-11-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 你的中断次数太频繁,导致喂狗函数不能及时响应
    • 发布于2018-11-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 检查你的喂狗函数是不是已经在正常执行,有可能是没有喂狗导致的复位
    • 发布于2018-12-09
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

定时器中断代码为什么一直因看门狗复位?