STM32看门狗(WDG)功能详解
目录
stm32 WDG看门狗
一、WDG基础知识
1)WDG(Watchdog)看门狗简介
- 独立看门狗(IWDG):独立工作,对时间精度要求较低
- 窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用

二、IWDG独立看门狗
1)IWDG键寄存器

2)IWDG超时时间

三、WWDG窗口看门狗
1)WWDG框图

2)WWDG工作特性

3)WWDG超时时间

4)IWDG和WWDG对比

四、实验
1)独立看门狗
int main(void){
OLED_Init();
Key_Init();
OLED_ShowString(1, 1, "IWDG Test");
if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) == SET)
{
OLED_ShowString(2, 1, "IWDGSET");
Delay_ms(500);
OLED_ShowString(2, 1, " ");
Delay_ms(100);
RCC_ClearFlag();
}
else
{
OLED_ShowString(3, 1, "RST");
Delay_ms(500);
OLED_ShowString(3, 1, " ");
Delay_ms(100);
}
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
IWDG_SetPrescaler(IWDG_Prescaler_16);
IWDG_SetReload(2499); //1000ms
IWDG_ReloadCounter();
IWDG_Enable();
while (1)
{
Key_GetNum();
IWDG_ReloadCounter();
OLED_ShowString(4, 1, "FEED");
Delay_ms(200);
OLED_ShowString(4, 1, " ");
Delay_ms(600);
}
}

2)窗口看门狗
int main(void){
OLED_Init();
Key_Init();
OLED_ShowString(1, 1, "WWDG Test");
if(RCC_GetFlagStatus(RCC_FLAG_WWDGRST) == SET)
{
OLED_ShowString(2, 1, "WWDGSET");
Delay_ms(500);
OLED_ShowString(2, 1, " ");
Delay_ms(100);
RCC_ClearFlag();
}
else
{
OLED_ShowString(3, 1, "RST");
Delay_ms(500);
OLED_ShowString(3, 1, " ");
Delay_ms(100);
}
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);
WWDG_SetPrescaler(WWDG_Prescaler_8);
WWDG_SetWindowValue(0x40 | 21);
WWDG_Enable(0x40 | 54);
while (1)
{
Key_GetNum();
OLED_ShowString(4, 1, "FEED");
Delay_ms(20);
OLED_ShowString(4, 1, " ");
Delay_ms(20);
WWDG_SetCounter(0x40 | 54);
}
}

附学习参考网址
- STM32入门教程-2023版 细致讲解 中文字幕
欢迎大家有问题评论交流 (* ^ ω ^)
作者:茯苓gao