0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32如何掉电存储数据

分享:

在STM32中实现掉电存储数据(即电源断开时保存关键数据),主要通过非易失性存储器实现。以下是常用方法及步骤详解:


1. 使用内部Flash存储

原理
利用STM32内置的Flash存储器(存储程序代码的区域),划分独立扇区存储数据。
特点

  • 无需外接硬件
  • 擦写寿命约1万次
  • 写入前需先擦除整个扇区

步骤

  1. 划分Flash区域
    在链接脚本中保留一个扇区(如Sector 7),避免被程序占用。

    // 例:STM32F4的扇区7起始地址为0x08060000
    #define DATA_FLASH_ADDR 0x08060000
  2. 掉电检测
    通过PVD(Programmable Voltage Detector)监控电压,触发中断:

    HAL_PWR_EnablePVD(); // 使能PVD
    __HAL_PVD_EXTI_ENABLE_IT(); // 使能中断
  3. 中断保存数据
    在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位寄存器)
  • 无需擦除,直接写入
  • 寿命近乎无限

步骤

  1. 启用备份域访问

    __HAL_RCC_PWR_CLK_ENABLE(); // 使能PWR时钟
    HAL_PWR_EnableBkUpAccess(); // 允许访问备份寄存器
    __HAL_RCC_BKP_CLK_ENABLE(); // 使能BKP时钟(旧型号)
  2. 写入数据

    HAL_RTCEx_BKUPWrite(&hrtc, BKP_DR1, 0x1234); // 使用RTC相关函数
    // 或直接操作寄存器(以STM32F1为例)
    BKP->DR1 = 0x1234; 
  3. 读取数据

    uint16_t data = HAL_RTCEx_BKUPRead(&hrtc, BKP_DR1);

3. 外接EEPROM芯片 (如AT24C02)

原理
通过I²C/SPI接口连接外部EEPROM,专用于数据存储。
特点

  • 擦写寿命10万~100万次
  • 存储容量大(1KB~512KB)
  • 需额外硬件

步骤

  1. 硬件连接

    • PB6SCL, PB7SDA(I²C接口)
    • 接VCC与GND,地址引脚接地。
  2. 软件写入

    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(); // 加锁

关键注意事项

  1. 掉电检测速度

    • PVD响应时间需快于电容放电时间(通常需在毫秒级完成保存)。
    • 建议在硬件上增加大电容延长掉电时间。
  2. 数据完整性

    • Flash写入时禁止中断,防止写入过程被打断。
    • 添加CRC校验,上电时验证数据完整性。
  3. 寿命管理

    • 避免频繁写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

单片机掉电检测与数据掉电保存方案

单片机掉电检测与数据掉电保存方案

2023-09-18 10:59:14

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

N76E003数据掉电存储是直接存在APROM中吗?

N76E003数据掉电存储是直接存在APROM中么,相关的例程有么

iyfhnvbn 2023-08-30 06:48:44

STM32存储区分为哪几种呢

背景:STM32存储区分为:随机存取存储器RAM和只读存储器ROM。其中:RAM为常说的内存,比如手机的2G内存4G内存等,就是程序跑起来的时候所占用的存储空间,特点是掉电数据丢失。ROM为常说

dfgsdf 2022-02-28 10:10:06

请问CH579有没有开启掉电存储功能,能否开启掉电中断?

请问CH579有没有开启掉电存储功能,能否开启掉电中断,一旦检测到掉电立即存储

预言者J 2022-08-09 07:17:15

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

电能质量在线监测装置掉电 10 分钟数据不丢吗?

电能质量在线监测装置在掉电 10 分钟时能否确保数据不丢失,取决于其 硬件设计、备用电源配置、数据存储机制 三大核心要素。以下是具体分析: 一、硬件设计与备用电源:决定基础续航能力 1. 常规装置

2025-11-09 17:26:13

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

很多时候我们需要将程序中的一些参数、数据存储在EEPROM或者Flash中,达到掉电保存的目的。但有些情况下,程序需要频繁的修改这些参数,如果每次修改参数都进行一次保存,那将大大降低存储器的寿命

2022-11-17 09:14:50

单片机掉电检测与数据掉电保存的实现

单片机在正常工作时,因某种原因造成突然掉电,将会丢失数据存储器(RAM)里的数据。在某些应用场合如测量、控制等领域,单片机正常工作中采集和运算出一些重要数据,待下次上电后需要恢复这些重要数据。因此

雪大大11 2021-05-31 09:22:39

选择单片机系统中的掉电存储要考虑哪些因素呢

单片机系统中的掉电存储是什么意思?选择单片机系统中的掉电存储要考虑哪些因素呢?

低调de炫耀爱 2022-01-21 07:01:00

stm32f746之存储的简单说明

存储器总的分为易失性存储器(掉电存储内容丢失)和非易失性存储器两大类。

2021-07-22 11:39:49

STM32掉电检测机制——PVD

有时在一些应用中,我们需要检测系统是否掉电了,或者要在掉电的瞬间需要做一些处理。STM32就有这样的掉电检测机制——PVD(Programmable Voltage Detecter),即可编程电压

jiuri1989 2021-08-05 07:48:15

手机存储必须要了解的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

加载更多
STM32如何掉电存储数据相关专题