本帖最后由 口天土立口 于 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)
- {
- }
详细代码,请查看附件!
WWDT.zip
(2.05 MB, 下载次数: 0)
|