IWDG独立看门狗

发布于 2023-01-23  82 次阅读


IWDG简介

Independent watchdog,即独立看门狗,它的本质是一个能产生系统复位信号的计数器

特性

1.递减的计数器

2.时钟由独立的RC振荡器提供(可在待机和停止模式下运行

3.看门狗被激活后,当递减计数器计数到0x000时产生复位

喂狗

在计数器计数到0之前,重装载计数器的值,防止复位

用途

外界电磁干扰或者自身系统(硬件或软件)异常,造成程序跑飞,如:陷入某个不正常的死循环,打断正常的程序运行。主要用于检测外界电磁干扰,或硬件异常导致的程序跑飞问题,应用在一些需要高稳定性的产品中,并且对时间精度要求较低的场合。独立看门狗是异常处理的最后手段,不可依赖,应在设计时尽量避免异常的发生。

IWDG工作原理

IWDG独立看门狗插图

IWDG框图

IWDG独立看门狗插图1

启用IWDG后,LSI时钟会自动开启

LSI时钟频率并不精确,F1用40kHz,F4/F7/H7用32kHz进行计算即可

IWDG溢出时间计算

IWDG溢出时间计算公式(HAL库)

IWDG独立看门狗插图2

寄存器设置分频系数的方法

IWDG独立看门狗插图3

IWDG最短最长超时时间(F1)

IWDG独立看门狗插图4

IWDG最短最长超时时间(F4/F7/H7)

IWDG独立看门狗插图5

IWDG配置步骤

函数主要寄存器主要功能
HAL_IWDG_InitIWDG_PR/RL/KR使能IWDG,设置预分频系数和重装载值等
HAL_IWDG_RefreshIWDG_KR把重装载寄存器的值重载到计数器中,喂狗

1.HAL_IWDG_Init

IWDG_HandleTypeDef iwdg_init;
void iwdg_config(void)
{
	iwdg_init.Instance = IWDG;
	iwdg_init.Init.Prescaler = IWDG_PRESCALER_64;//预分频系数
	iwdg_init.Init.Reload	 = 625;//装载值
	HAL_IWDG_Init(&iwdg_init);
}

2.HAL_IWDG_Refresh

void iwdg_feed(void){
	HAL_IWDG_Refresh(&iwdg_init); /* 重装载 */
}



白日梦想家