原子窗口看门狗例程--理解求助

2019-07-20 21:15发布

[mw_shl_code=c,true]int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2 delay_init(168); //初始化延时函数 LED_Init(); //初始化LED端口 KEY_Init(); //初始化按键 LED0=0; //点亮LED0 delay_ms(300); WWDG_Init(0x7F,0X5F,WWDG_Prescaler_8); //计数器值为7f,窗口寄存器为5f,分频数为8 // while(1) // { // LED0=1; //熄灭LED灯 // } }[/mw_shl_code] 本人使用原子的探索者开发板
上面这个原子窗口看门狗例程中的main函数的内容,我发现led一直在闪烁。即使屏蔽掉while的死循环也是led在闪烁。
所以,我想问的是,难道说每次看门狗中断了都将程序复位了吗?还是?这个地方我想不太明白,求解答。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
23条回答
zmingwang
2019-07-23 18:12
huaiqiao 发表于 2015-10-9 00:25
回复【12楼】正点原子:
---------------------------------
恩恩,怪我没有描述清楚。是这样的,原子哥。
...

按你的说法,就是不管在main函数中要不要那个while(1)的循环,LED1都会闪是吧?
正常情况下,LED1是会闪的,因为计数器减到0x40时会触发看门狗早期中断,就是你程序中的WWDG_IRQHandler,你有1个TICK的时间来响应中断并复位看门狗计数器
你把main中的while(1)去掉后,main函数会返回,之后有两种情况:
一是如果你重写了_sys_exit()函数,会调用你的_sys_exit函数,一般这个函数都是实现为while(1);的,这种情况下,早期看门狗中断依然可以响应,所以LED1会闪.
另一种情况就是没有重写_sys_exit,那么会调用C语言库的_sys_exit()函数,C库的实现上加了BKPT指令,当此指令被执行时,要么CPU停止,要么进HardFault_Handler,要么进DebugMon_Handler,总之,这种情况下,早期看门狗中断无法得到响应,将会产生复位.LED1也就不会闪了.

一周热门 更多>