STM32的数据保存
STM32的数据保存
更多
在 STM32 中保存数据通常涉及非易失性存储(数据掉电不丢失),以下是几种常用方法:
1. 内部 Flash 存储
- 适用场景:低频修改(如保存配置参数、校准值)
- 特点:
- 擦写次数有限(约 1万~10万次)。
- 以扇区为单位擦除(擦除后变为
0xFF),写入时只能将1改为0。
-
步骤:
#include "stm32f1xx_hal.h" // 根据型号引入对应库 uint32_t Address = 0x0800C000; // 示例地址(避开程序存储区) // 擦除扇区 FLASH_EraseInitTypeDef eraser; uint32_t PageError; eraser.TypeErase = FLASH_TYPEERASE_PAGES; eraser.PageAddress = Address; eraser.NbPages = 1; // 擦除1个扇区 HAL_FLASH_Unlock(); HAL_FLASHEx_Erase(&eraser, &PageError); // 写入数据(32位/字) uint32_t data = 0x12345678; HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, data); HAL_FLASH_Lock(); - 注意:需手动分配地址,避免覆盖程序代码(参考芯片手册的 Flash 分区图)。
2. 备份寄存器 (Backup Registers)
- 适用场景:极小量关键数据(如系统状态标志)
- 特点:
- 掉电不丢失(需
VBAT引脚接电池)。 - 数量少(STM32F1 为 20 字节;F4 为 4KB 备份 SRAM)。
- 掉电不丢失(需
-
使用方法:
// 使能备份域访问 __HAL_RCC_PWR_CLK_ENABLE(); HAL_PWR_EnableBkUpAccess(); // 写入备份寄存器(示例为 STM32F1) WRITE_REG(BKP->DR1, 0x1234); // 访问 BKP->DR1~DR20 // 读取数据 uint16_t data = READ_REG(BKP->DR1);
3. 外部 EEPROM(通过 I²C/SPI)
- 适用场景:频繁擦写(如数据日志)
- 特点:
- 擦写次数高(百万次以上)。
- 需额外硬件(如 24C02)。
- 代码示例(I²C):
uint8_t buffer[2] = {0xAB, 0xCD}; // 待保存数据 uint8_t addr = 0xA0; // EEPROM 地址 HAL_I2C_Mem_Write(&hi2c1, addr, 0x00, I2C_MEMADD_SIZE_8BIT, buffer, 2, 1000);
4. RTC 备份寄存器
- 适用场景:与时间相关的数据(如时间戳)
- 使用方法:
HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR0, 0x12345678); // 写入 uint32_t data = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0); // 读取
5. 文件系统(外部 SD 卡/SPI Flash)
- 适用场景:大容量数据存储(如音频、图像)
- 库支持:FatFS + HAL 库。
- 示例:
f_mount(&fs, "", 1); // 挂载文件系统 f_open(&file, "data.txt", FA_WRITE); f_write(&file, buffer, size, &bytes_written); f_close(&file);
关键注意事项:
- 操作安全:操作 Flash 期间禁止中断(避免代码在 Flash 运行)。
- 数据校验:添加 CRC/校验和确保数据完整。
- 磨损均衡:频繁写入时轮换地址(尤其 Flash)。
- 电压稳定:编程期间电压波动可能导致失败。
根据数据量、擦写频率和可靠性要求选择合适方法,优先推荐:
- 小数据 → 备份寄存器
- 中等数据 → EEPROM
- 大数据/文件 → 外部存储 (SD/SPI Flash)
怎么用js保存数据
JS保存数据是Web开发中非常重要的一个功能,它能够将用户的输入或者其他数据存储在浏览器中,随后方便地读取和使用。在本文中,我们将讨论不同的
2023-11-27 16:10:00
STM32F103C8T6使用内部Flash的第63页保存参数
;不过FLASH的容量还是可观的,我们可以利用FLASH模拟EEPROM。根据《STM32F10X闪存编程》中的介绍,FLASH除了保存用户代码的部分,其余部分我们是可以利用其作为
资料下载
479809
2021-11-26 16:51:07
STM32H750内部flash读写要如何保存数据?
请教下,STM32H750XBHx我看资料内置flash为128K,并且flash擦除的最小单元也是128K。这样的话我有数据要保存应该怎样处理
2023-08-05 07:37:07
为什么STM32F746G-DISC flasch内存断电读写后保存的数据会丢失?
为什么STM32F746G-DISC flasch内存断电读写后保存的数据会丢失?
2023-01-06 06:19:09
使用STM32的FPEC来利用MCU剩余的flash保存一些数据或者参数
尝试使用STM32的FPEC (Flash memory program/erase controller)来利用MCU剩余的flash保存一些数据
2021-08-11 06:11:10
7天热门专题
换一换
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- dtmb信号覆盖城市查询
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览