APM32E030的WWDT驱动
本帖最后由 口天土立口 于 2025-9-7 18:35 编辑APM32E030拥有一个窗口看门狗,此看门狗的喂狗时间必须在设计的窗口期内,早于窗口期或者晚于窗口期都将产生复位。
驱动代码如下:
/*
* @brief WWDT初始化
*
* @param is_debug_stop: 调试是否停止
*
* @retval None
*
*/
void bsp_wwdt_init(uint8_t is_debug_stop)
{
/* 调试时看门狗计数器是否停止工作 */
RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_DBGMCU);
if (is_debug_stop != 0) {
DBG_EnableAPB1Periph(DBG_APB1_PER_WWDT_STOP);
} else {
DBG_DisableAPB1Periph(DBG_APB1_PER_WWDT_STOP);
}
RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_WWDT);
WWDT_SetTimebase(WWDT_DIV_1);
WWDT_ConfigWindowValue(0x7F);
WWDT_EnableEWI();
WWDT_Enable(0xFF);
NVIC_EnableIRQ(WWDT_IRQn);
NVIC_SetPriority(WWDT_IRQn, 0);
}/*
* @brief WWDT喂狗
*
* @param None
*
* @retval None
*
*/
void bsp_wwdt_feed(void)
{
WWDT_ConfigCounter(0xFF);
}
void WWDT_IRQHandler(void)
{
if (WWDT_ReadStatusFlag()) {
bsp_wwdt_feed();
WWDT_ClearStatusFlag();
}
}
测试代码如下:
// 应用初始化
void app_init(void)
{
bsp_wwdt_init(1);
}
// 应用任务
void app_task(void)
{
}
详细代码,请查看附件!
帖子的内容上看窗口看门狗要求很严格,但代码上看和IWDT几乎一样 幻影书记 发表于 2025-9-8 14:17
帖子的内容上看窗口看门狗要求很严格,但代码上看和IWDT几乎一样
主要是喂狗上要求更严格,同时时钟源不一样 如果喂狗失败,系统会如何响应?
时钟源的事情还真没有注意到。
谢谢楼主 我注意到你设置了窗口值为0x7F,这个值是如何确定的?是基于什么考虑?
喂狗函数`bsp_wwdt_feed`的实现很简洁,直接重置了看门狗的计数器
页:
[1]