浅谈看门狗之独立看门狗

IWDG(Independent Watchdog)是STM32微控制器中的独立看门狗。它是一个由内部低速振荡器(LSI)驱动的独立的硬件计时器,即使在主时钟发生故障时也能工作。IWDG 通常用于检测程序的运行状态,如果程序卡死或者跑飞,IWDG 会在设定的时间溢出后触发系统复位。

IWDG 的主要特点包括:

  1. 12位递减计数器:IWDG 内部有一个12位的计数器,计数器的值会持续递减。
  2. 独立时钟源:由内部RC振荡器(LSI)提供时钟,通常取频率为40kHz。
  3. 预分频器:计数器时钟可以通过预分频器进行分频,分频系数可选4、8、16、32、64、128或256。
  4. 重装载值:可以通过重装载寄存器(IWDG_RLR)设置计数器的加载值,这个值决定了IWDG的溢出时间。
  5. 喂狗:在计数器溢出前,可以通过向键寄存器(IWDG_KR)写入特定的值(0xAAAA)来重置计数器,这个操作称为“喂狗”。
  6. 启动IWDG:通过向键寄存器写入0xCCCC来启动IWDG。
  7. 写保护:在修改预分频器(IWDG_PR)和重装载寄存器(IWDG_RLR)之前,需要先向键寄存器写入0x5555来解除写保护。

IWDG 的配置步骤通常如下:

  1. 解除写保护:向IWDG_KR写入0x5555。
  2. 设置预分频器:选择合适的分频系数。
  3. 设置重装载值:设置溢出时间。
  4. 喂狗:在计数器溢出前写入0xAAAA到IWDG_KR。
  5. 启动IWDG:向IWDG_KR写入0xCCCC。

在STM32 HAL库中,可以使用HAL_IWDG_InitHAL_IWDG_Refresh等函数来配置和操作IWDG。例如,初始化IWDG的代码可能如下:

IWDG_HandleTypeDef hiwdg;
hiwdg.Instance = IWDG;
hiwdg.Init.Prescaler = IWDG_PRESCALER_64;
hiwdg.Init.Reload = 625;
HAL_IWDG_Init(&hiwdg);

然后,在需要的时候进行喂狗操作:

HAL_IWDG_Refresh(&hiwdg);

IWDG 是STM32微控制器中重要的安全特性之一,适用于需要长时间稳定运行且对时间精度要求不高的场合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值