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

来源:互联网 发布:淘宝冲销量网站 编辑:程序博客网 时间:2024/05/29 04:23

测试看门狗

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

主程序:

    #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);//初始化并开启看门狗    ...//复位后程序最先执行的位置    ...//关于时钟的设置}....

分析:
短接晶振一段时间后,看门狗起作用,并使系统成功复位,但系统如果在设置主频时停住(没有外部时钟信号),则无法继续进行下一步,看门狗并没有在复位后被初始化,即便此时恢复外部时钟,系统已处于跑飞状态,看门狗失效。

0 0