1. IWDG简介
Independent watchdog,即独立看门狗
能产生系统复位信号的计数器
递减计数器 减数到零会复位
时钟由独立的RC振荡器,不来自主时钟,可在待机或停止模式下运行
喂狗即在计数到0之前,重装载防止复位
*系统复位五种
1)NRST引脚上的复位键,即开发板上的外部复位
2)窗口看门口计数终止(WWDG复位)
3)独立看门狗计数终止(IWDG复位)
4)软件复位(SW复位)
5)低功耗管理复位
独立看门狗
用于检测外界电磁干扰,或硬件异常导致的程序跑飞的问题
在一些需要高稳定的产品,对时间精度要求较低
异常处理的最后手段,不可依赖,应在设计时避免异常
2. IWDG寄存器配置操作步骤(可通过HAL库完成)
在键寄存器(IWDG_KR)中写入0xCCCC来使能IWDG
在键寄存器(IWDG_KR)中写入0x5555来使能寄存器访问
将预分频器寄存器(IWDG_PR)编程为0~7中的数值来配置预分配器
对重载寄存器(IWDG_RLR)进行写操作
等待寄存器更新(IWDG_SR = 0x0000 0000)
刷新计数器值为IWDG_RLR的值(IWDG_KR = 0xAAAA)
3. IWDG配置步骤
1)取消PR/RLR寄存器写保护,设置IWDG预分频系数和重装载值,启动IWDG
HAL_IWDG_Init()
2)及时喂狗,即写入0xAAAA到IWDG_KR
HAL_IWDG_Refresh()
4. HAL库函数
4.1 HAL_IWDG_Init()
函数定义 HAL_StatusTypeDef HAL_IWDG_Init (IWDG_HandleTypeDef * hiwdg)
函数描述 根据IWDG_InitTypeDef中指定的参数初始化IWDG
参数 hiwdg:指向有初始化数据的喂狗句柄
返回值 HAL status
IWDG_HandleTypeDef hiwdg;
hiwdg.Instance = IWDG;
hiwdg.Init.Prescaler = IWDG_PRESCALER_256; // 设置预分频器
hiwdg.Init.Reload = 4095; // 设置重装载值
4.2 HAL_IWDG_Refresh()
函数定义 HAL_StatusTypeDef HAL_IWDG_Refresh (IWDG_HandleTypeDef * hiwdg)
函数描述 喂狗
参数 hiwdg:指向有初始化数据的喂狗句柄
返回值 HAL status
while (1) {
// 定期喂独立看门狗
HAL_IWDG_Refresh(&hiwdg);
// 执行其他任务
}