STM32F407系列IWDG独立看门狗
1.IWDG简介
IWDG全程Independt Watchdog,即独立看门狗。其本质是能产生系统复位信号的计数器,它的时钟由独立的RC振荡器提供(可在待机和停止模式下运行,独立看门狗被激活以后,当计数器递减到0X0000的时产生复位。)在计数器计时到0之前,通过喂狗,重装载计数器的值,防止复位。F407的lsi时钟频率通过查阅手册为32kHz,如下。
2.IWDG的作用
1.异常:外界电磁干扰或者自身系统(硬件或软件)异常造成程序跑飞,如:陷入某个不正常的死循环,打断正常的程序运行
2.作用:主要用于检测外界电磁干扰,或程序跑飞问题
3.应用:在一些需要高稳定性的产品中,并且对精度要求较低的场合。
ps:独立看门狗是异常处理的最后手段,不可依赖,应尽量避免异常的发生!
2.1 溢出时间计算
T = 预分频系数 * 看门狗重装载值 / 时钟源频率
2.2 独立看门狗配置过程
1.取消PR(预分频)/RLR(重装载)寄存器保护
2.设置预分频和重装载寄存器系数,启动IWDG。
void IWDG_Init(void) { hiwdg.Instance = IWDG; hiwdg.Init.Prescaler = IWDG_PRESCALER_32; //设置IWDG分频系数 hiwdg.Init.Reload = 1000 * 3; //3秒喂狗 HAL_IWDG_Init(&hiwdg); //初始化IWDG }超时时间 = 3000 * 32 / 32000 = 3s。只要3s没有喂狗,即会复位。
main函数
IWDG_HandleTypeDef hiwdg; void main_thread(void* pArg) { IWDG_Init(); uint8_t nCnt = 0; while (1) { HAL_IWDG_Refresh(&hiwdg); Gpio_setPinToggle(&xLed); //生命信号指示灯闪亮 osDelay(500); } }验证:注释掉喂狗函数,程序3s即复位一次。
