0%

STM32-HAL折腾杂记(四)

STM32独立看门狗(IWDG)&窗口看门狗(WWDG)。

MCU:STM32F103C8T6

HAL:STM32Cube_FW_F1_V1.8.4

独立看门狗(IWDG)

独立看门狗由时钟LSI驱动,能够完全独立工作,适用于对时间精度要求较低的场合;递减计数至0时产生复位。

独立看门狗框图

独立看门狗超时时间

计算公式

超时时间=(预分频系数*(重装载值+1)/40)ms(LSI:40KHz)

预分频系数取值:48163264128256

重装载值范围:0~4095

STM32CubeMX配置

IWDGGPIO配置如下,其它照旧。

IWDG配置

GPIO配置

输出至LED:

由按键输入:

程序源码

main.c的主函数下,GPIO初始化MX_GPIO_Init();IWDG初始化MX_IWDG_Init();之间添加如下:

HAL_Delay(1000);
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_3);

然后在while循环中添加用于喂狗的按键:

随后编译&烧录,STM32启动后,LED首先处于状态,持续时间1秒,然后点亮;如果LED点亮后,在每隔1.6秒的时间段内喂狗,则LED保持常亮;如果LED点亮后,1.6秒内没喂狗,则STM32复位(LED熄灭)。

窗口看门狗(WWDG)

WWDG的窗口下限值固定为0x3F,不可修改,上限值可自定义;只能在窗口范围之内喂狗WWDG可以使能提前唤醒中断(Early wakeup interrupt),若计数器递减至0x40时还没喂狗,则会先进入中断,之后才复位可以在中断里喂狗

STM32CubeMX配置

WWDGGPIO配置如下,其它照旧。

WWDG配置

GPIO配置

输出至LED:

相关函数

WWDG初始化:void MX_WWDG_Init(void)

WWDG喂狗HAL_StatusTypeDef HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg)

WWDG中断处理:void HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg)

WWDG中断回调:__weak void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)

程序源码

main.c末尾添加WWDG中断回调函数:

然后编译&烧录,LED快速闪烁;若不喂狗,则LED几乎保持常亮。


参考资料

【STM32】HAL库 STM32CubeMX教程五—-看门狗(独立看门狗,窗口看门狗)

如何计算STM32定时器、独立看门狗和窗口看门狗