这是本文档旧的修订版!
银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
技术论坛 | http://www.eeschool.org | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-07-04 | gingko | 初次建立 |
int main(void) { /* MCU 配置*/ /* 重置所有外围设备,初始化Flash接口和Systick */ HAL_Init(); /* 配置系统时钟 */ SystemClock_Config(); HAL_Delay(300); /* 初始化所有已配置的外围设备 */ MX_GPIO_Init(); MX_WWDG_Init(); LED_RED_ON; //初始化LED状态,红灯亮 /* 无限循环 */ while (1) { while(ARM_KEY_STATE == KEY_DOWN); HAL_Delay(30); //30ms喂狗一次 HAL_WWDG_Refresh(&hwwdg); //喂狗 } }
/* WWDG初始化函数 */ void MX_WWDG_Init(void) { hwwdg.Instance = WWDG; hwwdg.Init.Prescaler = WWDG_PRESCALER_8; //选择WWDG的预分频系数。 hwwdg.Init.Window = 100; //窗口值 hwwdg.Init.Counter = 127; //计数器值 hwwdg.Init.EWIMode = WWDG_EWI_DISABLE;//禁用提前唤醒中断 if (HAL_WWDG_Init(&hwwdg) != HAL_OK)//初始化WWDG { _Error_Handler(__FILE__, __LINE__); } }
#define __HAL_WWDG_ENABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR, WWDG_CR_WDGA)
HAL_StatusTypeDef HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg) { /* 将WWDG计数器值写入WWDG CR以刷新 */ WRITE_REG(hwwdg->Instance->CR, (hwwdg->Init.Counter)); /* 返回函数状态 */ return HAL_OK; }
void HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg) { /* 检查是否启用了提前唤醒中断*/ if(__HAL_WWDG_GET_IT_SOURCE(hwwdg, WWDG_IT_EWI) != RESET) { /* 检查是否发生了WWDG提前唤醒中断 */ if(__HAL_WWDG_GET_FLAG(hwwdg, WWDG_FLAG_EWIF) != RESET) { /* 清除WWDG提前唤醒标志 */ __HAL_WWDG_CLEAR_FLAG(hwwdg, WWDG_FLAG_EWIF); /* 提前唤醒回调 */ HAL_WWDG_EarlyWakeupCallback(hwwdg); } } }