STM32独立看门狗IWDG的使用

一、定义

按照STM32参考手册的说法:“独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。”

 

简单的说,STM32 中的IWDG 其核心就是一个12bits的向下递减的计数器,当计数器计数到零时就会触发系统复位。因此,要在每次计数到零之前将其复位到一个初始值。这个初始值就在重装载寄存器(IWDG_RLR)中存放,其默认值为0xFFF,我们也可以将其改为其他值。

二、初始化

时钟来源: 内部的40KHz的时钟,与系统时钟无关!

如下所示:

 

这里的fsoc才是IWDG真正的时钟!(IWDG_Prescaler_XX指的是XX分频)。

IWDG的重载值寄存器:RLR 是一个16位的寄存器,只有低12bit可以使用,其他的保留!所以重载值最大是0xFFF

 

也就是从IWDG最大从0xFFF减到0 然后如果没有喂狗就会引起系统软件复位!

 

所以定时时间Time可以如下计算:

Time = (XX /(40*10^3))*Val(RLR) (s)

XX表示40KHz的分频!

 void IWDG_Configuration(void)
{
  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);    //允许写IWDG
  IWDG_SetPrescaler(IWDG_Prescaler_64);    //设置分频
  IWDG_SetReload(1250);       //设置Reload
  IWDG_ReloadCounter();//重载值
  IWDG_Enable();//时能IDWG
}

Time = (64/(40*10^3))*1250 =2s

注意在程序里面要手动喂狗!喂狗代码如下:

void IWDG_Feed(void)
{
    IWDG_ReloadCounter();  
}

如果大于2S不喂狗就会复位了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值