中断喂狗失败

2019-07-14 16:29发布

刚开始使用WWDG。用其他方法喂狗成功了,尝试通过中断喂狗失败:
使用tiMER2设置中断,发生中断时,设置标志。
主函数while检测到标志,清除标志,喂狗。
然后就失败了。
现在发现,开了狗,就进不去中断了,所以失败。想不通为什么狗会导致中断失败?
关了狗,中断正常。
不用中断,在while中延迟相等时间,喂狗成功。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
huazhe
1楼-- · 2019-07-14 21:12
 精彩回答 2  元偷偷看……
zrl12123456
2楼-- · 2019-07-15 00:07
huazhe 发表于 2018-10-30 15:54
本帖最后由 xmshao 于 2016-3-9 11:37 编辑

如果你定时时间长于WWDG的窗口时间,那定时器永远等不到溢出就被复位了。

喂狗的窗口时间是64.17ms~87.38ms
delay 70ms成功喂狗,定时70失败。关掉狗,发现定时确实是70ms
zrl12123456
3楼-- · 2019-07-15 02:45
huazhe 发表于 2018-10-30 15:54
本帖最后由 xmshao 于 2016-3-9 11:37 编辑

如果你定时时间长于WWDG的窗口时间,那定时器永远等不到溢出就被复位了。

感觉好像是stm32的问题,开启定时器会先进入一次中断,然后导致提前喂狗
zrl12123456
4楼-- · 2019-07-15 08:26
终于找到了。
STM32在开启中断前,TIMx_SR的UIF就置1了,所以一开启中断立即就会先进入一次中断,从而导致了提前喂狗。
解决办法就是在开启中断前先把UIF位置0.
TOPCB
5楼-- · 2019-07-15 10:52
建议不要在中断中喂狗,这样别的程序死掉的时候,喂狗还是会继续,导致程序不能复位。
huazhe
6楼-- · 2019-07-15 14:47
 精彩回答 2  元偷偷看……

一周热门 更多>