嵌入式系统---看门狗

打印 上一主题 下一主题

主题 875|帖子 875|积分 2625

        在嵌入式系统中,看门狗定时器(Watchdog Timer,WDT)是一种常用的机制,用于检测和恢复系统在非常环境下的故障。如果系统因为某种原因(如软件死循环)而变得无相应,看门狗定时器可以主动重启系统,从而防止系统长时间处于不可用状态。
          看门狗定时器通常需要定期“喂狗”(即写入特定的值以重置计时器),来防止它触发系统重启。如果系统正常工作,它会在看门狗定时器超时之前喂狗;如果系统出现问题,没有及时喂狗,看门狗定时器就会超时并触发重启。
  演示例子如下 :
  1. #include "stm32f4xx_hal.h"
  2. void StartWatchdog(void) {
  3.     // 启用独立看门狗
  4.     HAL_IWDG_Start(&hiwdg);
  5. }
  6. void FeedWatchdog(void) {
  7.     // 喂狗,重置看门狗的计数器
  8.     HAL_IWDG_Refresh(&hiwdg);
  9. }
  10. int main(void) {
  11.     // HAL库初始化
  12.     HAL_Init();
  13.    
  14.     // 配置系统时钟
  15.     SystemClock_Config();
  16.    
  17.     // 看门狗初始化配置
  18.     IWDG_HandleTypeDef hiwdg;
  19.     hiwdg.Instance = IWDG;
  20.     hiwdg.Init.Prescaler = IWDG_PRESCALER_4;
  21.     hiwdg.Init.Reload = 4095;
  22.     HAL_IWDG_Init(&hiwdg);
  23.    
  24.     // 开启看门狗
  25.     StartWatchdog();
  26.    
  27.     while (1) {
  28.         // 正常工作时,定期喂狗
  29.         FeedWatchdog();
  30.         
  31.         // 执行其他任务
  32.     }
  33. }
  34. void SystemClock_Config(void) {
  35.     // 系统时钟配置代码,根据具体硬件配置
  36. }
  37. void Error_Handler(void) {
  38.     // 错误处理代码
  39.     while(1) {
  40.     }
  41. }
复制代码
在这个例子中:
1.使用HAL_IWDG_Init()函数初始化看门狗定时器,设置预分频器和重载值。
2.使用HAL_IWDG_Start()函数启动看门狗定时器。
 3.使用HAL_IWDG_Refresh()函数喂狗,重置看门狗的计数器
总结:
        具体问题具体分析,有些场景下可能对看门狗的配置更加复杂,需要根据硬件手册以及库函数文档进行操作配置。
        要“关闭”看门狗定时器,通常意味着停止喂狗,让看门狗定时器超时并触发重启。在某些系统中,可能需要特别的操作或权限来完全禁用看门狗定时器,这通常不保举在正常运行的系统中进行,因为它会降低系统的可靠性和稳定性。
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曂沅仴駦

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表