按照如下流程进行编程
以下为wwdg.c文件
#include "wwdg.h"
#include "led.h"
#include "delay.h"
WWDG_HandleTypeDef wwdg_handle={0};
void wwdg_init(uint8_t tr, uint8_t wr ,uint32_t psc) // tr 为重装载值 wr为 窗口值 psc预分频系数
{
wwdg_handle.Instance =WWDG;
wwdg_handle.Init.Counter = tr; //计数器的值 由于从外部传进来的因此就是tr
wwdg_handle.Init.Window =wr; //窗口设定值
wwdg_handle.Init.Prescaler =psc ; //预分频的值
wwdg_handle.Init.EWIMode=WWDG_EWI_ENABLE; //EMI提前唤醒中断 ENABLE处于打开的状态
HAL_WWDG_Init(&wwdg_handle);
}
void HAL_WWDG_MspInit(WWDG_HandleTypeDef *hwwdg)
{
__HAL_RCC_WWDG_CLK_ENABLE(); // 打开窗口定时器时钟
HAL_NVIC_SetPriority(WWDG_IRQn,2,2); //设置中断优先级
HAL_NVIC_EnableIRQ(WWDG_IRQn); //设置中断号
}
void WWDG_IRQHandler(void)
{
HAL_WWDG_IRQHandler(&wwdg_handle);
}
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{
wwdg_feed();
led2_toggle();
}
void wwdg_feed(void)
{
HAL_WWDG_Refresh(&wwdg_handle);
}
特别要注意:
喂狗环节 不能主函数中while进行 因为必须要注意复位的条件 (延时时间注意)