历史上的今天
返回首页

历史上的今天

今天是: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,已经上锁再执行一遍问题不大

推荐阅读

史海拾趣

Avic公司的发展小趣事

随着中国航空工业的快速发展,Avic公司不断加强在航空电子技术领域的研发和创新。公司成功研制出一系列先进的航空电子系统,这些系统不仅提高了飞机的性能和安全性,也为中国航空工业的国际竞争力奠定了坚实基础。Avic公司在航空电子领域的突破,不仅推动了国内航空工业的发展,也为国际航空市场带来了新的选择。

明波通信(BWAVE)公司的发展小趣事

随着国内市场的日益饱和,明波通信开始将目光投向全球市场。公司先后在日本东京和江苏常州设立了子公司,通过技术合作和市场拓展,进一步巩固了公司在全球通信领域的地位。同时,明波通信也积极参与国际技术交流和合作,不断提升自身的技术水平和创新能力。这一系列的国际化战略举措,为明波通信的未来发展奠定了坚实的基础。

以上五个故事都是基于明波通信在电子行业中的发展历程和公开资料进行的概括性描述。虽然无法涵盖所有细节和具体事件,但希望能够展现出明波通信在创业、技术创新、市场拓展和国际化等方面的努力和成就。

ASC Capacitors公司的发展小趣事

ASC Capacitors一直注重技术研发和创新。在XXXX年,公司成功研发出了一种新型薄膜电容器,该电容器不仅具有优异的性能,而且寿命长达100,000小时以上。这一技术突破使得ASC Capacitors在电容器市场上取得了重大突破,也奠定了公司在行业内的领先地位。

Alorium Technology公司的发展小趣事

ASC Capacitors一直注重技术研发和创新。在XXXX年,公司成功研发出了一种新型薄膜电容器,该电容器不仅具有优异的性能,而且寿命长达100,000小时以上。这一技术突破使得ASC Capacitors在电容器市场上取得了重大突破,也奠定了公司在行业内的领先地位。

ENOCEAN公司的发展小趣事

自推出第一代产品以来,EnOcean凭借其卓越的性能和独特的优势,在欧洲市场上取得了良好的销售业绩。随后,随着公司不断推出新产品和技术,其产品的应用领域也逐渐扩大至全球范围。如今,EnOcean的无线模块已被全球100多家制造商选中,用于实现他们的建筑和工业系统理念。无线组件已经在超过20万栋建筑中使用,为节能建筑和创新产业提供了重要支持。

HP(Keysight)公司的发展小趣事

EnOcean GmbH成立于2001年,总部设在慕尼黑附近的奥伯兴。自创立之初,公司就专注于无线无源传输技术的研发,旨在提供一种无需外部电源、低维护成本的无线传感器解决方案。这种技术的核心在于能量转换器,能够收集环境中的微弱能量(如光能、振动能等),转化为电能供传感器使用。随着技术的不断完善,EnOcean逐渐在电子行业中崭露头角。

问答坊 | AI 解惑

超声波物位计的市场趋势

液位计的市场趋势 液位计应用场合极不相同,因而种类也繁多(超声波物位计)。 生产过程中各类塔釜罐液位的检测,目前仍是以压力和差压变送器为主。这除了其自身性价比还有一定的优势外,还有设计和应用的习惯问题。其次是磁浮子式、浮筒式、电容 ...…

查看全部问答>

请教关于DA转换的电路?

读出倾角传感器的模拟电压输出值,把它转换为数字信号!各位高手给点参考的资料吧。A\\D D\\A这是第一次弄,很菜!!!谢谢啦!-_-#…

查看全部问答>

请教一个老问题,关于获取sd卡序列号

找了不少以前的文章,还是没有解决我的问题 读取SD卡的序列号,老实说,我还没有做到,我不知是为什么,下边的代码希望能抛砖引玉,解决好这个问题。      问题的关键所在:在WINCE下,IOCTL_DISK_GET_STORAGEID    ...…

查看全部问答>

WINCE应用程序开发

     学习和使用了半年多的C#,现在转向WINCE应用程序开发,网上和朋友都推荐我使用VC进行WINCE应用 程序开发,谈到说C#将会是WINDOWS桌面程序的天下,而在WINCE下还是VC的天下,     自己要放弃C#,从头天始学习VC ...…

查看全部问答>

btdrt.lib问题

我现在在做魅族M8的蓝牙开发程序,对于配对想通过自己的程序实现,其中需要用到BthGetPINRequest等函数。这些函数在bt_api.h中是存在的,但是编译的时候不能通过,查阅MSDN需要加入btdrt.lib。但是SDK中并没有提供。而且我在网上搜不到。不知道我应 ...…

查看全部问答>

MC34063降压驱动电路

用MC34063做降压确实效率比专业IC的低,但是作为低成本的不失为一个好方案, 如果要求高一点可以用PT4115来做.或者其它类似的IC. 如果说是输入12V的电子变压器是没有什么问题,如果输入24V的话,那就要看电子变压器的稳压程度怎么样 ...…

查看全部问答>

[Johnson & Graham]1_High-speed Digital Design 中文版

高速数字电路设计 中文版,概述就不必了,经典书!!     资源共享,不要收费了,大家学习!!       …

查看全部问答>

STM32最小系统板设计资料,适合做各种实验

STM32的一大特色就是各种不同封装的型号之间的引脚是互相兼容的,这里介绍的2个STM32最小系统板体现了这个特色。 下载 (219.33 KB) 2009-11-12 16:01 下图中左边是PCB的背面,右边是PCB的正面,上半边的板适合于36脚和 ...…

查看全部问答>

关于DK-LM3Sxxxx开发板的一点建议

最近公司有个项目要搞,正好拿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- ...…

查看全部问答>