中断喂狗失败
刚开始使用WWDG。用其他方法喂狗成功了,尝试通过中断喂狗失败:使用TIMER2设置中断,发生中断时,设置标志。
主函数while检测到标志,清除标志,喂狗。
然后就失败了。
现在发现,开了狗,就进不去中断了,所以失败。想不通为什么狗会导致中断失败?
关了狗,中断正常。
不用中断,在while中延迟相等时间,喂狗成功。
顶起来…… 本帖最后由 xmshao 于 2016-3-9 11:37 编辑
如果你定时时间长于WWDG的窗口时间,那定时器永远等不到溢出就被复位了。
你说 “不用中断,在while中延迟相等时间,喂狗成功” 确信不是误会?这个相等时间是跟定时器的时间还是看门狗的窗口时间? xmshao 发表于 2016-3-9 11:33
如果你定时时间长于WWDG的窗口时间,那定时器永远等不到溢出就被复位了。
你说 “不用中断,在while中延迟 ...
喂狗的窗口时间是64.17ms~87.38ms
delay 70ms成功喂狗,定时70失败。关掉狗,发现定时确实是70ms
xmshao 发表于 2016-3-9 11:33
如果你定时时间长于WWDG的窗口时间,那定时器永远等不到溢出就被复位了。
你说 “不用中断,在while中延迟 ...
感觉好像是stm32的问题,开启定时器会先进入一次中断,然后导致提前喂狗
终于找到了。
STM32在开启中断前,TIMx_SR的UIF就置1了,所以一开启中断立即就会先进入一次中断,从而导致了提前喂狗。
解决办法就是在开启中断前先把UIF位置0. 建议不要在中断中喂狗,这样别的程序死掉的时候,喂狗还是会继续,导致程序不能复位。 潇潇雨歇pku 发表于 2016-3-9 14:12
感觉好像是stm32的问题,开启定时器会先进入一次中断,然后导致提前喂狗
你提到的定时器开启就进入中断跟配置有点关系,有些情况下有这个问题。
多数时候可能对应用没啥影响可能就忽视了。
不过你这个问题,应该说参数配置有待琢磨。
http://mp.weixin.qq.com/s?__biz=MzA3OTIxMjQyNQ==&mid=205748433&idx=1&sn=e86e3a12d93d702878657eeb2d655020#rd
STM32 定时器有时一开启就进中断的话题 安 发表于 2016-3-9 15:19
建议不要在中断中喂狗,这样别的程序死掉的时候,喂狗还是会继续,导致程序不能复位。 ...
直接在中断中喂狗是的。但是我是在中断中设置标志,然后在主函数中判断以后再喂狗,应该没问题吧? xmshao 发表于 2016-3-9 15:22
你提到的定时器开启就进入中断跟配置有点关系,有些情况下有这个问题。
多数时候可能对应用没啥影响可能 ...
哈哈哈,你也是二姨和这边两边都上啊
页:
[1]
2