15. WWDG配置步骤

发布时间 2023-07-08 23:20:14作者: 一代枭雄

1. WWDG配置步骤

2. 相关HAL库函数介绍

3.编程实战

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; //Early Wakeup Interrupt Mode enable
    HAL_WWDG_Init(&g_wwdg_handle);
}

/* WWDG MSP回调函数 */
//像在MSP中设置的这些内容,可能换一块板子,由于硬件的不同,就需要重新配置,我们将这样的内容放到MSP中进行配置
//HAL_WWDG_MspInit函数系统默认定义的是__weak,即允许用户进行重定义,这个地方有点中断服务回调函数的味道。

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库的公共处理函数,在这里面会调用中断回调函数HAL_WWDG_EarlyWakeupCallback
		//该函数的内容是需要我们自己实现的
    HAL_WWDG_IRQHandler(&g_wwdg_handle); 
}

/* WWDG提前唤醒回调函数 */
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{
    HAL_WWDG_Refresh(&g_wwdg_handle);  //喂狗,否则会reset
    LED1_TOGGLE();
}