赞
踩
注意:需要在窗口期内进行“喂狗”操作,才不会复位。W[6:0]≥窗口期>0x3F
- #include "./BSP/WDG/wdg.h"
- #include "./BSP/LED/led.h"
- #include "./SYSTEM/delay/delay.h"
-
- WWDG_HandleTypeDef g_wwdg_handle;
-
- /* 窗口看门狗初始化函数 */
- void wwdg_init(uint8_t tr, uint8_t wr, uint32_t fprer)
- {
- g_wwdg_handle.Instance = WWDG;
- g_wwdg_handle.Init.Counter = tr;
- g_wwdg_handle.Init.Window = wr;
- g_wwdg_handle.Init.Prescaler = fprer;
- g_wwdg_handle.Init.EWIMode = WWDG_EWI_ENABLE; /* 计数器达到0x40即产生中断 */
- HAL_WWDG_Init(&g_wwdg_handle);
-
-
- }
-
- /* WWDG MSP回调函数 */
- void HAL_WWDG_MspInit(WWDG_HandleTypeDef *hwwdg)
- {
- __HAL_RCC_WWDG_CLK_ENABLE();
-
- HAL_NVIC_SetPriority(WWDG_IRQn, 2, 3);
- HAL_NVIC_EnableIRQ(WWDG_IRQn);
- }
-
- /* WWDG中断服务函数 */
- void WWDG_IRQHandler(void)
- {
- HAL_WWDG_IRQHandler(&g_wwdg_handle); /* 调用回调函数 */
- }
-
- /* WWDG提前唤醒回调函数 */
- void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
- {
- //delay_ms(1);
- HAL_WWDG_Refresh(&g_wwdg_handle); /* 喂狗 */
- LED1_TOGGLE();
- }
-
- #include "./SYSTEM/sys/sys.h"
- #include "./SYSTEM/usart/usart.h"
- #include "./SYSTEM/delay/delay.h"
- #include "./BSP/LED/led.h"
- #include "./BSP/WDG/wdg.h"
-
- int main(void)
- {
- HAL_Init(); /* 初始化HAL库 */
- sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
- delay_init(72); /* 延时初始化 */
- usart_init(115200); /* 初始化串口 */
- led_init();
-
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) != RESET) /* RCC_FLAG_WWDGRST=1时,表明窗口看门狗复位 */
- {
- printf("窗口看门狗复位!\r\n");
- __HAL_RCC_CLEAR_RESET_FLAGS(); /* 清零标志位 */
- }
- else
- {
- printf("外部复位!\r\n");
- }
- delay_ms(500);
- printf("请在窗口期内喂狗!\r\n");
- wwdg_init(0x7f, 0x5f, WWDG_PRESCALER_8); /* WWDG初始化,超时时间约等于29ms */
-
-
- while(1)
- {
- delay_ms(85); /* 在非窗口期内喂狗才会复位 */
- HAL_WWDG_Refresh(&g_wwdg_handle); /* 喂狗 */
- LED0_TOGGLE();
-
- }
- }
if判断APB1 外设复位寄存器 (RCC_APB1RSTR)中的WWDGRST位来判断是否为窗口看门狗复位。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。