STM32独立看门狗(IWDG)&窗口看门狗(WWDG)。
MCU:STM32F103C8T6
HAL:STM32Cube_FW_F1_V1.8.4
独立看门狗(IWDG)
独立看门狗由时钟LSI
驱动,能够完全独立工作,适用于对时间精度要求较低的场合;递减计数至0
时产生复位。
独立看门狗框图
独立看门狗超时时间
计算公式
超时时间=(预分频系数*(重装载值+1)/40)ms(LSI:40KHz)
预分频系数
取值:4
、8
、16
、32
、64
、128
、256
重装载值
范围:0~4095
STM32CubeMX配置
IWDG
和GPIO
配置如下,其它照旧。
IWDG配置
GPIO配置
输出至LED:
由按键输入:
程序源码
在main.c
的主函数下,GPIO
初始化MX_GPIO_Init();
和IWDG
初始化MX_IWDG_Init();
之间添加如下:
HAL_Delay(1000); |
然后在while
循环中添加用于喂狗
的按键:
随后编译&烧录,STM32启动后,LED首先处于灭
状态,持续时间1秒,然后点亮;如果LED点亮后,在每隔1.6秒的时间段内喂狗
,则LED保持常亮;如果LED点亮后,1.6秒内没喂狗
,则STM32复位(LED熄灭)。
窗口看门狗(WWDG)
WWDG
的窗口下限值固定为0x3F
,不可修改,上限值可自定义;只能在窗口范围之内喂狗
;WWDG
可以使能提前唤醒中断(Early wakeup interrupt)
,若计数器递减至0x40
时还没喂狗
,则会先进入中断,之后才复位,可以在中断里喂狗
。
STM32CubeMX配置
WWDG
和GPIO
配置如下,其它照旧。
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几乎保持常亮。
参考资料: