当前位置: 首页 > news >正文

判断看门狗是否开启的方法

1. 检查看门狗控制寄存器

HC32L19X 看门狗控制寄存器检查

#include "hc32l19x.h"bool IsWatchdogEnabled(void)
{// 检查WWDT控制寄存器使能位if (M0P_WDT->CR & 0x01)  // 检查使能位{return true;  // 看门狗已开启}return false;     // 看门狗未开启
}

2. 软件检测方法

3. 方法一:超时复位检测

void CheckWatchdogStatus(void)
{static uint32_t lastTick = 0;static uint32_t resetCount = 0;// 检查是否发生了看门狗复位if (M0P_RST_ST0 & 0x02)  // 检查看门狗复位标志{printf("看门狗复位发生!\n");M0P_RST_ST0 |= 0x02;  // 清除复位标志}// 定期打印信息,观察是否正常执行if (HAL_GetTick() - lastTick > 5000){lastTick = HAL_GetTick();printf("系统正常运行,看门狗可能未开启或正常喂狗\n");}
}

方法二:喂狗测试

void TestWatchdogByFeeding(void)
{printf("开始看门狗测试...\n");// 故意延迟,观察是否复位for(int i = 0; i < 10; i++){HAL_Delay(1000);printf("运行 %d 秒\n", i+1);// 如果不喂狗,看门狗开启时会复位// WWDT_FeedDog();  // 注释掉喂狗操作}printf("如果看到此信息,看门狗可能未开启\n");
}

3. 硬件调试方法

使用调试器检查

void DebugWatchdogStatus(void)
{// 在调试模式下检查寄存器值uint32_t wdt_cr = M0P_WDT->CR;uint32_t wdt_sr = M0P_WDT->SR;printf("WDT控制寄存器: 0x%08lX\n", wdt_cr);printf("WDT状态寄存器: 0x%08lX\n", wdt_sr);if (wdt_cr & 0x01){printf("看门狗已开启\n");printf("超时时间: %lu ms\n", CalculateTimeout(wdt_cr));}else{printf("看门狗未开启\n");}
}uint32_t CalculateTimeout(uint32_t wdt_cr)
{// 根据预分频器和重载值计算超时时间uint32_t prediv = (wdt_cr >> 8) & 0x07;  // 预分频器uint32_t reload = (wdt_cr >> 16) & 0xFFF; // 重载值uint32_t timeout_ms = (reload * (1 << (prediv + 1))) / 1000;return timeout_ms;
}

4. 完整的检测程序

#include "hc32l19x.h"
#include <stdio.h>typedef enum
{WDT_DISABLED = 0,WDT_ENABLED = 1,WDT_STATUS_UNKNOWN = 2
} WDT_Status_t;WDT_Status_t CheckWatchdogCompleteStatus(void)
{WDT_Status_t status = WDT_STATUS_UNKNOWN;// 方法1:检查控制寄存器if (M0P_WDT->CR & 0x01){status = WDT_ENABLED;printf("寄存器检测: 看门狗已开启\n");}else{status = WDT_DISABLED;printf("寄存器检测: 看门狗未开启\n");}// 方法2:检查复位状态寄存器if (M0P_RST_ST0 & 0x02){printf("最近发生过看门狗复位\n");M0P_RST_ST0 |= 0x02;  // 清除标志}return status;
}void WatchdogBehaviorTest(void)
{printf("=== 看门狗行为测试 ===\n");WDT_Status_t status = CheckWatchdogCompleteStatus();if (status == WDT_DISABLED){printf("测试: 看门狗确认未开启,系统不会因未喂狗复位\n");// 长时间运行测试for(int i = 0; i < 30; i++){HAL_Delay(1000);printf("运行 %d 秒 - 看门狗未开启,系统正常\n", i+1);}}else if (status == WDT_ENABLED){printf("警告: 看门狗已开启!需要定期喂狗\n");printf("开始喂狗测试...\n");for(int i = 0; i < 10; i++){HAL_Delay(1000);WWDT_FeedDog();  // 正常喂狗printf("正常运行 %d 秒,已喂狗\n", i+1);}}
}int main(void)
{// 系统初始化SystemInit();// 检查看门狗状态WatchdogBehaviorTest();while(1){// 主循环HAL_Delay(1000);// 如果看门狗开启,需要在这里定期喂狗// WWDT_FeedDog();}
}

5. 判断依据总结

判断方法看门狗开启的特征看门狗关闭的特征
寄存器检查CR寄存器的使能位为1CR寄存器的使能位为0
复位标志RST_ST0有看门狗复位标志无看门狗复位标志
行为测试不喂狗会导致系统复位不喂狗系统正常运行
调试观察计数器值在变化计数器值不变
http://www.dtcms.com/a/408338.html

相关文章:

  • 校园二手交易网站设计的原则来宾绍兴seo网站托管方案
  • 网站流量 名词系统开发的大概步骤
  • 揭阳住房和城乡建设厅网站wordpress站标
  • 天津做艺术品的网站潍坊建设银行网站
  • 杭州市健康城市建设网站wordpress用户上传资源验证码
  • 电商网站模块有哪些网站建设多少价格
  • wordpress 站中站群晖wordpress 月穿
  • 柳城企业网站建设公司视频聚合网站怎么做不侵权
  • 采票网站刷流水做任务大连做网站优化价格
  • 苏州网站建设哪家更好房屋中介的网站怎么建设
  • 东莞app制作公司合肥网站的优化
  • 网站关键词优化有用吗小程序开发平台需要多少钱
  • 三亚房产网站开发安徽seo网站推广
  • 个人网站建设怎么赚钱佛山专业做网站公司哪家好
  • 做网站要怎么备案教育网站建设方案
  • Zabbix7.4.8(四):通过 SNMP 监控打印机
  • 怎么自己做网站空间工程合同模板
  • 海康域名网站上海十大知名装修公司
  • 黄圃网站建设做网站找模版好吗
  • 做网站图片路径做缓存吗网站建设包括哪些
  • 腾讯风铃怎么做网站怎么建设只要注册就赚钱的网站
  • 滨州做网站的杭州网站优化效果
  • 投资网站建设公司多少钱自贡网站推广
  • 上海建设网站浦东新区污水管网工程域名注册服务商网站
  • 荥阳市网站建设wordpress新建的页面不存在
  • 浦口区教育局网站集约化建设优化推广服务商
  • sched_ext调度器task stall分析
  • 公司网站销售怎么做的珠宝首饰网站建设规划书
  • 湖州外贸网站建设信誉好的盐城网站开发
  • 小白怎么做网站赚钱自己做网站怎么做的