初级会员

- 积分
- 87
- 金钱
- 87
- 注册时间
- 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);
}
|
|