打印
[AT32F403/403A]

关于看门狗的使用

[复制链接]
920|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vt2017|  楼主 | 2020-11-22 12:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 vt2017 于 2020-11-22 12:17 编辑

最近用AT32在做一个低功耗的项目,为了实现低功耗模式下的定时唤醒,我选择的是使用相对比较简单的看门狗来做,下面就分享一下使用过程~

为了最大限度的降低功耗,我用的是待机模式(standby mode),先看看几种低功耗模式以及唤醒的区别:


可以看到待机模式下,能够满足定时唤醒的只有看门狗和RTC,虽然RTC也能够实现唤醒的功能,但暂时我还没有实现这部分功能,后续应该会抽空把RTC唤醒的方法也实现,可以做个对比~


AT32提供了两种看门狗,分别是独立看门狗(IWDG)和窗口看门狗(WWDG),其区别大概有以下几点:
1、独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效;窗口看门狗由从 APB1 时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。
2、IWDG 最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合;WWDG 最适合那些要求看门狗在精确计时窗口起作用的应用程序。
3、IWDG相对于WWDG超时时间可以设置的很长,IWDG最大可设置为几十秒而WWDG最多几十毫秒。
4、WWDG具有唤醒中断,可在发生超时前产生中断进行喂狗,避免程序复位,IWDG无此功能

由于待机模式下WWDG是不工作的,并且其超时时间也不符合需求,所以我们用IWDG来做唤醒定时器。
来看一下IWDG的配置方法:
IWDG_KeyRegWrite(IWDG_KeyRegWrite_Enable); //解开IWDG寄存器的访问保护
IWDG_SetPrescaler(IWDG_Psc_256);//配置IWDG时钟的分频,配到最大256
IWDG_SetReload(0xFFF);//设置重载值0xFFF
IWDG_ReloadCounter();//其实可以不用在这里重载,但按我的经验重载一下会比较好
IWDG_Enable();//使能IWDG
通过以上5句代码就将独立看门狗配置好啦,我配置的超时时间大概是30s,即进入待机模式半分钟之后唤醒。

使用过程中还有以下几个注意点:
1、看门狗开启之后是无法关闭的,只有系统复位才能够将其关闭
2、为了在程序执行过程中不造成看门狗复位,建议在每次进入低功耗之前再去开启看门狗
3、关于调试模式,可以在调试模块中开启 DBG_IWDG_STOP,使得进入调试时看门狗停止计数,避免复位
4、在选项字节中能够配置使用硬件 or 软件看门狗,硬件看门狗则不需要在代码中初始化,开机后会立即使能IWDG





使用特权

评论回复
沙发
x史可法| | 2020-11-22 22:32 | 只看该作者
多谢分享 现在at的芯片好像基本都有看门狗

使用特权

评论回复
板凳
正圆椭圆| | 2020-11-22 22:42 | 只看该作者
看门狗只有系统复位才能关闭

使用特权

评论回复
地板
一刀一级| | 2020-11-23 15:01 | 只看该作者
好资料,学习了

使用特权

评论回复
5
嵌入小菜菜| | 2020-11-23 15:16 | 只看该作者
之前使用的看门狗比较少,可能由于代码量并不是特别大的原因吧,现在看了楼主的**,感觉开门狗特别实用。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

69

帖子

3

粉丝