一,独立看门狗
二,独立看门狗的时钟源
独立看门狗拥有自己的时钟源,不依赖PLL时钟输出的分频信号,能够独立运行,这样子的好处就是PLL假如受到干扰,
导致运行异常,独立的看门狗还能正常地进行工作,如果没有正常的喂狗动作,就复位CPU。
三、程序设计
1. 添加复位检测代码,有助于观察当前工作的可靠性
/* Check if the system has resumed from IWDG reset,检查当前复位是否有独立看门狗导致 */ if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET) { /* IWDGRST flag set */ printf("iwdt reset cpu\r\n"); /* Clear reset flags */ RCC_ClearFlag(); } else { /* IWDGRST flag is not set */ printf("normal reset cpu\r\n"); }
2.
/* Enable write access to IWDG_PR and IWDG_RLR registers,独立看门狗是受到保护的,现在进行解锁动作 */ IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); /* IWDG counter clock: LSI/256 ,设置看门狗的时钟 = 32KHz / 256 =125Hz */ IWDG_SetPrescaler(IWDG_Prescaler_256); /* 设置看门狗的超时时间,也就是设置它的计数值 当前看门狗的时钟为125Hz,然后设置超时时间为1秒,那么重载值为125 当前看门狗的时钟为125Hz,然后设置超时时间为2秒,那么重载值为250 */ IWDG_SetReload(125); /* Reload IWDG counter,重载独立看门狗的计数值,说白了就是喂狗 */ IWDG_ReloadCounter(); /* Enable IWDG (the LSI oscillator will be enabled by hardware),使能独立看门狗 */ IWDG_Enable();
3. 喂狗技巧
1.在裸机代码实现喂狗,放在定时器里面,因为定时器与看门狗是使用不同的时钟源,允许这么做!
2. 如果有实时的操作系统的加持,可以在任务里面添加喂狗动作,如果操作系统崩溃了,能够检测到软件的错误,触发CPU的复位。
在定时器中断服务函数当中,添加喂狗动作!
---恢复内容结束---
原文地址:https://www.cnblogs.com/xiangtingshen/p/10963552.html
时间: 2024-10-07 22:34:51