您的位置:首页 > 其它

【stm32f103-学习笔记】测试看门狗

2016-08-12 22:57 197 查看

测试看门狗

开启看门狗,程序跑飞时,看门狗会复位系统,尝试恢复系统。

主程序:

#include "...."
int main(void)
{

fun_init();    //延时函数、其他外设初始化
IWDG_Init(6,350);//初始化并开启看门狗
while(1)
{
IWDG_Feed(); //喂狗
TASK_1();  //任务1
TASK_2();//任务2
}
}


我的测试方法:

看门狗的时钟和主频不相同,设置使用外部晶振;在系统正常工作的时候用一根导线将晶振两只脚短接,主时钟没了,系统就相当于跑飞了,即没有正常喂狗;

恢复外部时钟一段时间后,按理应该是会产生看门狗复位;可是测试了几次后发现:系统经常会出现跑飞但系统并不重启的情况。

几经查找调试,在系统时钟初始化前 初始化看门狗,喂狗位置不变,按上文测试方法测试,测试通过

修改程序,将看门狗初始化位置修改:

.....
extern  IWDG_Init(6,350);
void SystemInit (void)
{
IWDG_Init(6,350);//初始化并开启看门狗
...//复位后程序最先执行的位置
...//关于时钟的设置
}
....


分析:

短接晶振一段时间后,看门狗起作用,并使系统成功复位,但系统如果在设置主频时停住(没有外部时钟信号),则无法继续进行下一步,看门狗并没有在复位后被初始化,即便此时恢复外部时钟,系统已处于跑飞状态,看门狗失效。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  stm32 看门狗