7.6.1 看门狗定时器内部结构
STM32中的看门狗定时器包括IWDG和WWDG。这两个看门狗定时器提供了更高的安全性、时间的精确性和使用的灵活性,其作用是检测和解决由软件错误引起的故障,当计数器达到给定的超时值时,触发一个中断(仅适用于WWDG)或产生系统复位。IWDG适用于那些需要看门狗定时器在主程序之外能够完全独立工作,并且对时间精度要求较低的场景。WWDG适用于那些要求看门狗定时器在精确计时窗口起作用的场景。
1.IWDG工作原理
IWDG由LSI驱动,即使主时钟发生故障,它仍然有效。
IWDG是12位向下计数器(递减计数器),其框图如图7.21所示。IWDG分为软件看门狗和硬件看门狗。软件看门狗的工作原理:在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗,此时计数器开始从其复位值0xFFF递减计数;当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。无论何时,只要在键寄存器IWDG_KR中写入0xAAAA,重载寄存器(IWDG_RLR)中的值就会被重载到计数器,从而避免产生看门狗复位。

图7.21 IWDG框图
如果用户在选择字节中启用了硬件看门狗功能,系统上电复位后,看门狗会自动开始运行;如果在计数器计数结束前,软件没有向键寄存器写入相应的值,那么系统会产生复位。
2.IWDG相关的HAL库函数
IWDG相关的HAL库函数在文件“stm32f1xx_hal_iwdg.c/h”中,如表7.14所示。
表7.14 IWDG相关的HAL库函数

IWDG的句柄为IWDG_HandleTypeDef,该结构体定义如下。

主要语句功能如下。
①Instance:定义IWDG寄存器。
②Init:定义IWDG的相关配置参数,具体如下。
(https://www.daowen.com)
其中,分频值Prescaler有4、8、16、32、64、128、256分频,如IWDG_PRESCALER_4表示4分频。
3.WWDG工作原理
WWDG由从APB1时钟分频后得到的基准时钟驱动,通过可配置的时间窗口来检测应用程序非正常过迟或过早的操作。
WWDG是7位向下计数器,内部结构如图7.22所示。若看门狗被启动(WWDG_CR寄存器中的WDGA位被置1),并且当7位(T[6∶0])递减计数器从0x40翻转到0x3F(T6位清零)时,则产生一个复位。如果软件在计数器值大于窗口寄存器中的数值时重新装载计数器,将产生一个复位。
4.WWDG相关的HAL库函数
WWDG相关的HAL库函数在文件“stm32f1xx_hal_wwdg.c/h”中,如表7.15所示。

图7.22 WWDG内部结构
表7.15 WWDG相关的HAL库函数

WWDG的句柄为WWDG_HandleTypeDef,该结构体定义如下。

主要语句功能如下。
①Instance:定义WWDG寄存器。
②Init:配置WWDG的参数,具体如下。

其中,分频值Prescaler有1、2、4、8分频,如WWDG_PRESCALER_4表示4分频。