STM32通过ADC模拟看门狗实现掉电保存

发布时间:2023-03-27  

1.前言很多时候我们需要将程序中的一些参数、数据等存储在EEPROM或者Flash中,达到掉电保存的目的。但有些情况下,程序需要频繁的修改这些参数,如果每次修改参数都进行一次保存,那将大大降低存储器的寿命。尤其是单片机内部Flash,以STM32F030K6T6为例,擦写寿命只有1000次。当然,这是最小值,实际可能比这个多,但也是有风险。

因此,最好的办法就是在程序运行中不进行保存操作,只在断电时保存一次。掉电保存的关键是怎样检测掉电瞬间,方法有很多种:1.通过外部电路检测电源,触发IO中断。2.通过单片机的PVD(可编程电压检测器) 中断检测。3.通过ADC看门狗中断检测。不管哪种方式,一般都是通过中断来实现,主要是为了快速响应。今天主要介绍第三种方式,通过ADC看门狗实现掉电保存。


2.硬件设计

2.1掉电时间

掉电保存的前提是断电后电源电压是缓慢下降的,这样才有足够的时间去检测掉电并保存数据。因此,电源上必须有个大电容,保证电源断开后能继续给单片机供电。具体需要维持多长时间,要看存储器的擦写周期。以STM32F030K6T6的内部存储器为例,擦除一页需要30ms,写入一个16位数据需要53.5us。根据实际需要擦除和写入的数据多少来计算至少需要多少时间。还需要关注一个参数,编程电压。在用示波器测量掉电时的波形时,测量出从断电瞬间到电压降低到2.4V时的时间,该时间大于总的数据擦写的时间即可。当然要留有一定裕量。如果时间不够,就要加大电容了。

2.2ADC检测 ADC检测掉电的方式有两种,一种是通过某个通道直接采集电源电压(或者分压后采集),另一种是采集内部参考电压Vrefint来判断电源电压。第一种方式很好理解,采样值就代表电源电压,可以直接去触发ADC的看门狗中断。第二种方式由于内部参考电压是不变的,STM32F030是1.23V,有一定误差。当电源电压变化时,ADC采集的参考电压会发生变化,因此也可以通过这个变化触发看门狗中断。这里有个前提,即单片机的VREF引脚或AVDD引脚就是要检测的电源电压。

3.软件设计首先打开STM32CubeMx,配置一下ADC,如下。

首先需要使能Vrefint Channel,如果需要其它通道也可以使能。其次需要使能ADC的看门狗,看门狗通道选择Vrefint,设置一下高/低门限值,使能看门狗中断模式,同时ADC的中断也要打开。这里的高/低门限是指,当ADC的采样值大于高门限或小于低门限时,ADC的看门狗中断将被触发。如果是用于掉电检测,只要关心高门限就行。正常时ADC采样值=1.23*4096/3.3,大约是1526左右,由于Vrefint和电源电压都有误差,所以只是个大概。如果我们将掉电电压检测值设为3.1V,那对应的ADC看门狗的高门限值应为1.23*4096/3.1,约1625左右。

然后再ADC的中断中添加保存数据的程序即。这里有两点需要注意:一是在中断中先关闭功耗较大的外设,比如液晶背光、数码管等。使断电时电源电压下降不至于太快。二是在保存数据后关闭看门狗中断,或者直接死循环(因为已经断电,也不需要执行其它程序了)。这样做主要是为了防止电压下降的太慢,多次触发看门狗中断,导致最后一次写入错误。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    检测。3.通过ADC看门狗中断检测。不管哪种方式,一般都是通过中断来实现,主要是为了快速响应。今天主要介绍第三种方式,通过ADC看门狗实现掉电保存2.硬件设计 2.1掉电时间 掉电保存......
    挂了),便实现处理器的自动复位重启(发送复位信号)。 下面我们在了解几个与独立看门狗相关联的寄存器之后讲解怎么通过库函数来实现配置。 首先是键值寄存器IWDG_KR,该寄存器的各位描述如图所示: 在键......
    stm32f103zet6怎么保存flash参数;  STM32的闪存模块由:主存储器、信息块和闪存存储器接口寄存器等 3 部分组成。   主存储器,该部分用来存放代码和数据常数(如 const......
    计数周期 s3c2410wdt_suspend --挂起看门狗,就是在关闭看门狗之前保存状态 s3c2410wdt_resume --恢复看门狗计时器   第四个问题: 这些操作硬件的代码在驱动程序中又是怎么组织的呢? 前面说到,芯片内部的这个看门狗......
    数字示波器怎么存储波形;  在获得数字示波器的波形后很多小伙伴都不知道怎么保存,接下来跟随小编一起了解下示波器波形存储到U盘的方法步骤。   1、通过示波器的探头获得了自己所需的波形。   2......
    (IWDG_WriteAccess_Enable);   2)设置独立看门狗的预分频系数和重装载值   设置看门狗的分频系数的函数是:   void IWDG_SetPrescaler(uint8_t IWDG_Prescaler......
    STM32看门狗WWDG和IWDG的区别是什么;STM32有2看门狗:独立看门狗和窗口看门狗。 独立看门狗IWDG:独立于系统之外,因为有独立时钟,所以不受系统影响的系统故障探测器,主要......
    三位PR[2:0](Prescaler divider)有效,可设置有8种不同的计数器时钟预分频因子。 重装载寄存器(IWDG_RLR)低12位RL[11:0]: 看门狗计数器重装载值 (Watchdog......
    数   stm32独立看门狗和窗口看门狗特性、区别:   总结起来,两者大概有以下几点特性和区别:   1)独立看门狗没有中断,窗口看门狗有中断   2)独立看门狗有硬件软件之分,窗口看门狗只能软件控制   3......
    stm32mp1 Cortex M4开发篇7:窗口看门狗;1.资源扩展板介绍 1.1硬件介绍&资源扩展板可开发项目 2.Cortex-M4 窗口看门狗 2.1实验目的 熟悉......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>