IWDG简介
Independent watchdog,即独立看门狗,它的本质是一个能产生系统复位信号的计数器
特性
1.递减的计数器
2.时钟由独立的RC振荡器提供(可在待机和停止模式下运行
3.看门狗被激活后,当递减计数器计数到0x000时产生复位
喂狗
在计数器计数到0之前,重装载计数器的值,防止复位
用途
外界电磁干扰或者自身系统(硬件或软件)异常,造成程序跑飞,如:陷入某个不正常的死循环,打断正常的程序运行。主要用于检测外界电磁干扰,或硬件异常导致的程序跑飞问题,应用在一些需要高稳定性的产品中,并且对时间精度要求较低的场合。独立看门狗是异常处理的最后手段,不可依赖,应在设计时尽量避免异常的发生。
IWDG工作原理
IWDG框图
启用IWDG后,LSI时钟会自动开启
LSI时钟频率并不精确,F1用40kHz,F4/F7/H7用32kHz进行计算即可
IWDG溢出时间计算
IWDG溢出时间计算公式(HAL库)
寄存器设置分频系数的方法
IWDG最短最长超时时间(F1)
IWDG最短最长超时时间(F4/F7/H7)
IWDG配置步骤
函数 | 主要寄存器 | 主要功能 |
HAL_IWDG_Init | IWDG_PR/RL/KR | 使能IWDG,设置预分频系数和重装载值等 |
HAL_IWDG_Refresh | IWDG_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); /* 重装载 */
}
Comments NOTHING