硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1881|回复: 0
收起左侧

低功耗模式下的看门狗使用

[复制链接]

29

主题

5

回帖

92

积分

初级会员

积分
92
发表于 2020-12-2 19:26:12 | 显示全部楼层 |阅读模式
本帖最后由 danny 于 2020-12-2 19:29 编辑

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

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

可以看到待机模式下,能够满足定时唤醒的只有看门狗和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

PS:AT32这个国产芯片还是不错的,跟某大厂兼容性做的很好,文档资料也比较齐全,感兴趣的兄弟可以去他们官网或者论坛板块看看~
artery官网:[http://www.arterytek.com/cn/index.jsp]


回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-24 03:43 , Processed in 0.256299 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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