IWDG
Independent watchdog,即独立看门狗
IWDG:能产生系统复位信号的计数器
- 递减的计数器
- 时钟由独立的RC振荡器提供(可在待机和停止模式运行)
- 看门狗被激活后,当递减计数器计数到0x000时产生复位
喂狗:在计数器计数到0之前,重装载计数器的值,防止复位
系统复位
除了时钟控制器的RCC_CSR寄存器中的复位标志位和备份区域中的寄存器以外,系统复位将复位所有寄存器至它们的复位状态。
当发送以下任一事件时,产生一个系统复位:
- NRST引脚上的低电平(外部复位)
- 窗口看门狗计数终止(WWDG复位)
- 独立看门狗计数终止(IWDG复位)
- 软件复位(SW复位)
- 低功耗管理复位
IWDG作用
异常:外界电磁干扰或者自身系统(硬件或软件)异常,造成程序跑飞,如:陷入某个不正常的死循环,打断正常的程序运行。
作用:主要用于检测外界电磁干扰,或硬件异常导致的程序跑飞问题。
应用:在一些需要高稳定性的产品中,并且对时间精度要求较低的场合。
独立看门狗是异常处理的最后手段,不可依赖,应在设计时尽量避免异常的发生。
CPU必须及时喂狗,否则系统复位重启!
HAL库相关函数介绍
- HAL_IWDG_Init():主要寄存器IWDG_PR/RL/KR,使能IWDG,设置预分频系数和重装载值等。
- HAL_IWDG_Refresh:主要寄存器IWDG_KR,把重装载寄存器的值重载到计数器中,喂狗。
typedef struct{
IWDG_TypeDef *Instance; //IWDG寄存器基地址
IWDG_InitTypeDef Init; //IWDG初始化参数
}IWDG_HandleTypeDef;
typedef struct
{
uint32_t Prescaler; //预分频系数
uint32_t Reload; //重装载值
}IWDG_InitTypeDef;
验证不及时喂狗,系统将复位重启
WWDG
Window Watchdog,即窗口看门狗。
WWDG本质:能产生系统复位信号和提前唤醒中断的计数器。
WWDG的特性:
- 递减的计数器
- 当递减计数器值从0x40减到0x3F时复位(64->63)
- 计数器的值大于W[6:0]值时喂狗会复位
- 提前唤醒中断(EWI):当递减计数器等于0x40时可产生
喂狗:在窗口期内重装载计数器的值,防止复位。
作用:用于监测单片机程序运行时效是否精准,主要检测软件异常。
应用:需要精准监测程序运行时间的场合