出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) 。
STM32内置两个看门狗(独立看门狗/窗口看门狗)
独立看门狗(IWDG)
由专用的低速时钟(LSI)驱动,即使主时钟发生故障它仍有效。
独立看门狗适合应用于需要看门狗作为一个在主程序之外能够完全独立工作,并且对时间精度要求低的场合。
窗口看门狗
由从
APB1
时钟分频后得到时钟驱动。通过可配置的时间窗口
来检测应用程序非正常的过迟或过早操作。
窗口看门狗最适合那些要求看门狗在精确计时窗口起作用的程序。
键值寄存器:IWDG_KR 16位
重装载寄存器:IWDG_RLR 12位
复位信号:IWDG_RESET
向 IWDG_KR 写 0xcccc; //开启独立看门狗
此后计数器从 0xfff 向下递减; 如果计数器减到 0x000; 时,则会产生复位信号 IWDG_RESERT 单片机重启。
正常情况计数器未减至 0x000 时,会向 IWDG_KR 写 0xaaaa (喂狗);则 IWDG_RLR(一个值) 被写入计数器。
预分频寄存器:IWDG_PR 3位 //将LSI时钟分频为计数器提供时序
状态寄存器:IWDG_SR 2位 //
PS:IWDG_PR 和 IWDG_RLR 具有写保护,操作要先写0x5555申请写入。
独立看门狗操作步骤
①
取消寄存器写保护:
IWDG_WriteAccessCmd();
② 设置独立看门狗的预分频系数,确定时钟:
IWDG_SetPrescaler();
③ 设置看门狗重装载值,确定溢出时间:
IWDG_SetReload();
④ 使能看门狗
IWDG_Enable();
⑤ 应用程序喂狗:
IWDG_ReloadCounter(); //该函数放在定时器中断里面,中断时间位10ms~20ms为佳。