历史上的今天
今天是:2024年11月12日(星期二)
2019年11月12日 | STM32休眠时关闭看门狗计数的简单解决方案
2019-11-12 来源:eefocus
测试平台
本文采用STM32L476进行测试,休眠模式为STOP,看门狗为独立看门狗IWDG。
其余STM32芯片可参考本贴进行测试。
问题的提出
在此之前对这个问题的解决方法主要有三种:
(1)采用调试模式关闭内核的功能来关闭看门狗计数;
(2)休眠时采用时钟唤醒来喂狗后继续休眠;
(3)用基于系统时钟的窗口看门狗WWDG
第一种方法对STM32L476无效;第二种方案太折腾了,影响RTC使用且费电;第三种方案喂狗间隔太短。
问题的解决
官方数据手册中说明了可以在STOP休眠状态关闭IDWG
因此,只需要修改FLASH_OPTR寄存器的对应位既可以实现休眠免喂狗的功能。


源代码
源代码参考了STM32L4XX_HAL_FLASH_EX.C这个库文件,也感谢朱老师NBIOT学习群管理员给予的有益的建议。
uint8_t flag_IWDG;
flag_IWDG=READ_BIT(FLASH->OPTR, FLASH_OPTR_IWDG_STOP)!=0;//设置旗标,避免反复加载flash导致重启
if(flag_IWDG!=0)
{
HAL_FLASH_Unlock();
HAL_FLASH_OB_Unlock();//解锁FLASH
CLEAR_BIT(FLASH->OPTR, FLASH_OPTR_IWDG_STOP);//修改看门狗参数为:休眠时看门狗停止计数
/* Set OPTSTRT Bit */
SET_BIT(FLASH->CR, FLASH_CR_OPTSTRT);//以下3句不可缺少,否则无法修改FLASH->OPTR
/* Wait for last operation to be completed */
FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);
/* If the option byte program operation is completed, disable the OPTSTRT Bit */
CLEAR_BIT(FLASH->CR, FLASH_CR_OPTSTRT);
HAL_FLASH_OB_Launch();//加载flash,会导致重启
}
HAL_FLASH_OB_Lock();
HAL_FLASH_Lock();//修改完后关闭flash,已经上锁再执行一遍问题不大
史海拾趣
|
液位计的市场趋势 液位计应用场合极不相同,因而种类也繁多(超声波物位计)。 生产过程中各类塔釜罐液位的检测,目前仍是以压力和差压变送器为主。这除了其自身性价比还有一定的优势外,还有设计和应用的习惯问题。其次是磁浮子式、浮筒式、电容 ...… 查看全部问答> |
|
找了不少以前的文章,还是没有解决我的问题 读取SD卡的序列号,老实说,我还没有做到,我不知是为什么,下边的代码希望能抛砖引玉,解决好这个问题。 问题的关键所在:在WINCE下,IOCTL_DISK_GET_STORAGEID   ...… 查看全部问答> |
|
学习和使用了半年多的C#,现在转向WINCE应用程序开发,网上和朋友都推荐我使用VC进行WINCE应用 程序开发,谈到说C#将会是WINDOWS桌面程序的天下,而在WINCE下还是VC的天下, 自己要放弃C#,从头天始学习VC ...… 查看全部问答> |
|
我现在在做魅族M8的蓝牙开发程序,对于配对想通过自己的程序实现,其中需要用到BthGetPINRequest等函数。这些函数在bt_api.h中是存在的,但是编译的时候不能通过,查阅MSDN需要加入btdrt.lib。但是SDK中并没有提供。而且我在网上搜不到。不知道我应 ...… 查看全部问答> |
|
用MC34063做降压确实效率比专业IC的低,但是作为低成本的不失为一个好方案, 如果要求高一点可以用PT4115来做.或者其它类似的IC. 如果说是输入12V的电子变压器是没有什么问题,如果输入24V的话,那就要看电子变压器的稳压程度怎么样 ...… 查看全部问答> |
|
[Johnson & Graham]1_High-speed Digital Design 中文版 高速数字电路设计 中文版,概述就不必了,经典书!! 资源共享,不要收费了,大家学习!! … 查看全部问答> |
|
STM32的一大特色就是各种不同封装的型号之间的引脚是互相兼容的,这里介绍的2个STM32最小系统板体现了这个特色。 下载 (219.33 KB) 2009-11-12 16:01 下图中左边是PCB的背面,右边是PCB的正面,上半边的板适合于36脚和 ...… 查看全部问答> |
|
最近公司有个项目要搞,正好拿luminary练一下手。看到了DK-LM3S9B96开发板这个板子不错,功能很强大。唯一不足的是没有485输出。可能是我从参加工作到目前搞的产品有关,几乎是每个板子都需要485接口的。而且我感觉,在实际工作中,各种工控产品, ...… 查看全部问答> |
|
我自己做了一个单片机最小系统,可是在用P0口(已加上拉电阻),控制led灯时, #include<reg52.h>sbit feng=P0^1;int i;void main() { i=10000; while(1) { feng=0; while(i- ...… 查看全部问答> |




