在STM32中实现掉电存储数据(即电源断开时保存关键数据),主要通过非易失性存储器实现。以下是常用方法及步骤详解:
1. 使用内部Flash存储
原理:
利用STM32内置的Flash存储器(存储程序代码的区域),划分独立扇区存储数据。
特点:
- 无需外接硬件
- 擦写寿命约1万次
- 写入前需先擦除整个扇区
步骤:
-
划分Flash区域:
在链接脚本中保留一个扇区(如Sector 7),避免被程序占用。// 例:STM32F4的扇区7起始地址为0x08060000 #define DATA_FLASH_ADDR 0x08060000 -
掉电检测:
通过PVD(Programmable Voltage Detector)监控电压,触发中断:HAL_PWR_EnablePVD(); // 使能PVD __HAL_PVD_EXTI_ENABLE_IT(); // 使能中断 -
中断保存数据:
在PVD中断服务函数中擦除Flash并写入数据:void PVD_IRQHandler(void) { if (__HAL_PVD_EXTI_GET_FLAG()) { HAL_FLASH_Unlock(); // 解锁Flash // 擦除扇区(STM32F4为例) FLASH_Erase_Sector(FLASH_SECTOR_7, VOLTAGE_RANGE_3); // 写入数据(以32位为单位) uint32_t data = 0x12345678; HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, DATA_FLASH_ADDR, data); HAL_FLASH_Lock(); // 锁定Flash __HAL_PVD_EXTI_CLEAR_FLAG(); // 清除中断标志 } }
2. 使用备份寄存器 (Backup Registers)
原理:
利用STM32的备份域(由VBAT引脚供电),数据在系统掉电后仍能保存(需纽扣电池)。
特点:
- 仅适用少量数据(通常20个16位寄存器)
- 无需擦除,直接写入
- 寿命近乎无限
步骤:
-
启用备份域访问:
__HAL_RCC_PWR_CLK_ENABLE(); // 使能PWR时钟 HAL_PWR_EnableBkUpAccess(); // 允许访问备份寄存器 __HAL_RCC_BKP_CLK_ENABLE(); // 使能BKP时钟(旧型号) -
写入数据:
HAL_RTCEx_BKUPWrite(&hrtc, BKP_DR1, 0x1234); // 使用RTC相关函数 // 或直接操作寄存器(以STM32F1为例) BKP->DR1 = 0x1234; -
读取数据:
uint16_t data = HAL_RTCEx_BKUPRead(&hrtc, BKP_DR1);
3. 外接EEPROM芯片 (如AT24C02)
原理:
通过I²C/SPI接口连接外部EEPROM,专用于数据存储。
特点:
- 擦写寿命10万~100万次
- 存储容量大(1KB~512KB)
- 需额外硬件
步骤:
-
硬件连接:
PB6→SCL,PB7→SDA(I²C接口)- 接VCC与GND,地址引脚接地。
-
软件写入:
uint8_t buffer[] = {1, 2, 3, 4}; HAL_I2C_Mem_Write(&hi2c1, 0xA0, 0x00, I2C_MEMADD_SIZE_8BIT, buffer, 4, 100);
4. 内置EEPROM (部分型号如STM32L系列)
原理:
某些STM32(如L系列)集成了真正的EEPROM。
步骤:
HAL_FLASHEx_DATAEEPROM_Unlock(); // 解锁EEPROM
HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAMDATA_WORD, 0x08080000, 0x12345678); //写入
HAL_FLASHEx_DATAEEPROM_Lock(); // 加锁
关键注意事项
-
掉电检测速度:
- PVD响应时间需快于电容放电时间(通常需在毫秒级完成保存)。
- 建议在硬件上增加大电容延长掉电时间。
-
数据完整性:
- Flash写入时禁止中断,防止写入过程被打断。
- 添加CRC校验,上电时验证数据完整性。
-
寿命管理:
- 避免频繁写Flash,采用"先擦后写+磨损均衡"策略。
- 备份寄存器/RAM+超级电容方案可减少写入次数。
方案选择建议
| 场景 | 推荐方案 |
|---|---|
| 保存少量系统参数 | 备份寄存器 + VBAT |
| 频繁记录数据 | 外接EEPROM |
| 无额外硬件 | 内部Flash |
| 低功耗MCU(如L系列) | 内置EEPROM |
通过上述方法,可确保STM32在掉电瞬间安全保存关键数据。
什么是掉电保护,掉电保护数据常用的3种方案
掉电保护是系统在掉电之后能够对相关数据进行存储的一种方式,系统运行中所采集或产生的数据常常要求在电源掉电时不被丢失,重新加电后系统能恢复原来的工作状态。
2022-12-19 13:48:51
STM32系统中掉电保存数据的方法是什么
STM32系统中掉电保存数据的方法在嵌入式设备开发中,往往需要保存一些掉电不易失性的数据,如果系统配置、用户定制信息等等,如果增加额外的ROM IC,比如(基于I2C的24C02等等)往往会造成额外
heks
2021-12-10 07:42:57
STM32系统中的2种数据掉电保护方法!
STM32系统中的2种数据掉电保护方法!在嵌入式设备开发中,往往需要保存一些掉电不易失性的数据,如果系统配置、用户定制信息等等,如果增加额外的ROM IC,比如(基于I2C的24C02等等)往往会
luxiaodan1992
2020-04-17 15:16:15
使用CH552T的Data存储数据发现掉电,上电存储的数据变有什么好办法?
请问使用CH552T的Data存储数据,发现掉电,上电存储的数据变,请问有什么好办法?晶振频率24M
h1654155275.6473
2022-06-01 06:55:20
几种掉电不丢数据的存储设备的区别
首先谈一下几种掉电不丢数据的存储设备的区别:1.Norflash:可擦写,贵,在Norflash上可以直接运行代码!2.Nandflash:可擦写,便宜,只能用于存储数据;3.磁盘:就是我们常说
hzmbs2016
2021-11-03 07:02:02
stm32 flash写数据怎么存储的
stm32 flash写数据怎么存储的 STM32是一款广泛应用于嵌入式系统开发的微控制器,它的Flash存储器是其中一个重要的组成部分。在本文中,我将详细介绍STM32 Flash的存储机制
2024-01-31 15:46:03
避免存储器件掉电丢数据,我们要怎么做?
记录数据的可靠性,通常只考虑到突然掉电、写入不完全等,往往忽略了存储器件的使用寿命。存储器件的擦除次数寿命是行业公认的客观事实,工程师只能尽量的符合器件使用规范,以免过快损耗擦写寿命
emitter
2020-09-16 10:58:10
实现掉电保护的三种方案
掉电保护是系统在掉电之后能够对相关数据进行存储的一种方式,系统运行中所采集或产生的数据常常要求在电源掉电时不被丢失,重新加电后系统能恢复原来的工作状态。
2023-03-06 14:57:21
掉电保护如何恢复原来的工作状态
掉电保护是系统在掉电之后能够对相关数据进行存储的一种方式,系统运行中所采集或产生的数据常常要求在电源掉电时不被丢失,重新加电后系统能恢复原来的工作状态。
2023-05-17 09:35:52
STM32中存储区分为哪几种呢
背景:STM32中存储区分为:随机存取存储器RAM和只读存储器ROM。其中:RAM为常说的内存,比如手机的2G内存4G内存等,就是程序跑起来的时候所占用的存储空间,特点是掉电数据丢失。ROM为常说
dfgsdf
2022-02-28 10:10:06
STM32系统中如何数据掉电保护
在嵌入式设备开发中,往往需要保存一些掉电不易失性的数据,如果系统配置、用户定制信息等等,如果增加额外的ROM IC,比如(基于I2C的24C02等等)往往会造成额外的PCB空间增大,硬件成本增加,降低产品的性价比。
2020-03-09 16:26:01
读取Flash中存储的数值
STM32实现掉电保存多个数据本篇文章的具体内容:1. 初步认识Flash2. Flash写入多个数3. 读取Flash中存储的数值一、初步认识FLASH如果想要实现掉电存储,首要的任务就是找到一个
kangt
2021-07-22 06:06:20
EEPROM掉电存储实验过程
一、实验任务EEPROM掉电存储二、原理分析在这里不多做介绍,如果需要理解原理可以移步,单片机复习篇。三、实验过程1、搭好框架(这里加入了absacc头文件,简单框架,可跳过
djelje
2022-02-18 06:29:08
怎样使数据在掉电后不丢失呢
文章目录引言一、EEPROM简介二、EEPROM-AT24C02三、AT24C02写入操作引言单片机运行时的数据都存在于RAM (随机存储器)中,在掉电后RAM中的数据是无法保留的,那么怎样使数据在
qi12345
2022-01-21 06:41:03
M058S单片机掉电保存数据问题求解
想请教一下关于新塘单片机(M058S)掉电保存数据问题。其实应该就是掉电存储数据的问题了。主要是涉及到硬件上的问题:目前掉电存储数据有三种方式,1.电容缓冲存储 2.使用电池检测电压存储 3.UPS
麦特拉布
2023-06-20 06:33:32
STM32F429NIH6 一款STM32位控制MCU
2023-09-21 10:51:59
电能质量在线监测装置掉电 10 分钟数据不丢吗?
电能质量在线监测装置在掉电 10 分钟时能否确保数据不丢失,取决于其 硬件设计、备用电源配置、数据存储机制 三大核心要素。以下是具体分析: 一、硬件设计与备用电源:决定基础续航能力 1. 常规装置
2025-11-09 17:26:13
STM32通过ADC模拟看门狗实现掉电保存
很多时候我们需要将程序中的一些参数、数据等存储在EEPROM或者Flash中,达到掉电保存的目的。但有些情况下,程序需要频繁的修改这些参数,如果每次修改参数都进行一次保存,那将大大降低存储器的寿命
2022-11-17 09:14:50
STM32F407VET6 一款STM32位微控制器MCU(ST意法)
2023-11-28 15:50:30
单片机掉电检测与数据掉电保存的实现
单片机在正常工作时,因某种原因造成突然掉电,将会丢失数据存储器(RAM)里的数据。在某些应用场合如测量、控制等领域,单片机正常工作中采集和运算出一些重要数据,待下次上电后需要恢复这些重要数据。因此
雪大大11
2021-05-31 09:22:39
STM32的掉电检测机制——PVD
有时在一些应用中,我们需要检测系统是否掉电了,或者要在掉电的瞬间需要做一些处理。STM32就有这样的掉电检测机制——PVD(Programmable Voltage Detecter),即可编程电压
jiuri1989
2021-08-05 07:48:15
STM32F429IIT6 一款STM32位微控制器MCU(ST意法)
2023-11-28 15:53:48
手机存储必须要了解的UFS基础知识
在手机中有三大件组成:CPU、内存DDR、存储设备(EMMC/UFS等),内存用以临时存储程序运行时所需的数据(掉电数据丢失),而存储设备用以长久保存数据(掉电数据不丢失)。
2022-08-17 10:21:56
STM32F030电压监测实现STM32发生掉电
STM32F030 电压监测实现STM32发生掉电时,可以通过检测掉电,记录掉电发生或保存少量数据,在快速恢复电压或者重启后,进行状态恢复。实现电压监测的方式有两种,第一种时利用PVD的方式,PVD
地瓜
2021-08-12 06:20:36
littlefs文件系统掉电保护是如何实现的?
文档: 在 STM32L4 上应用 littlefs 文件系统文档上说little fs支持 擦写均衡 和 掉电保护;擦写均衡可以理解,通过打包几条写入,由写入几次变一次,从而增大flash寿命;这样要写入的数据临时保存在ram中,掉电不就没了,这个掉电保护是如果实现的,是用电池供电的ram吗
felixbury
2022-10-18 11:26:55