| 
 
初级会员 
 
	积分88金钱88 注册时间2020-11-7在线时间8 小时 | 
 
10金钱 
| 战舰F103板子 课堂上跟着视频学习 喂狗延时那里 main函数延时30ms  提前唤醒回调函数里延时1ms  延时时间加起来31ms  远远小于最大理论值58.25ms  但是程序会喂狗失败 导致程序复位 
 
  我把提前唤醒函数里面的延时屏蔽 此时的喂狗函数就能正常喂狗
 
 程序源码如下 请问问题出现在哪里啊 谢谢
 
  main函数代码
 #include "./BSP/LED/led.h"
 #include "./SYSTEM/delay/delay.h"
 #include "./BSP/WWDG/wwdg.h"
 #include "./SYSTEM/usart/usart.h"
 
 int main(void)
 {
 HAL_Init();                                                        //初始化HAL库
 sys_stm32_clock_init(RCC_PLL_MUL9); //设置时钟,72Mhz
 delay_init(72);
 led_init();
 usart_init(115200);                                        //波特率设置为115200
 
 if(__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST)!=RESET)
 {
 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);
 
 while(1)
 {
 delay_ms(30);
 //HAL_WWDG_Refresh(&g_wwdg_handle);
 
 }
 }
 
 
 #include "./BSP/WWDG/wwdg.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;
 HAL_WWDG_Init(&g_wwdg_handle);
 }
 
 wwdg代码
 
 void HAL_WWDG_MspInit(WWDG_HandleTypeDef *hwwdg)
 {
 __HAL_RCC_WWDG_CLK_ENABLE();
 
 HAL_NVIC_SetPriority(WWDG_IRQn, 2, 3);
 HAL_NVIC_EnableIRQ(WWDG_IRQn);
 
 }
 
 void WWDG_IRQHandler(void)
 {
 HAL_WWDG_IRQHandler(&g_wwdg_handle);
 }
 
 void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
 {
 //HAL_GPIO_TogglePin();
 delay_ms(1);
 HAL_WWDG_Refresh(&g_wwdg_handle);
 }
 
 
 
 | 
 |