15.[Stm32]FLASH闪存

摘要:FLASH闪存的存储结构;如何向FLASH中读取数据、写入数据、擦除数据;

FLASH闪存是一种非易失性存储,掉电后数据不丢失。

FLASH闪存包括程序存储器、系统存储器、选项字节三部分,其中程序存储器为存储程序的地方,系统存储器中的参数不可修改。

闪存读写会使程序暂停。

FLASH的分区
分区 作用 起始地址
程序存储器 存储C语言编译后的程序代码 0x 0800 0000
系统存储器 存储BootLoader(启动参数) 0x 1FFF F000
选项字节 存储一些独立于程序代码的配置参数 0x 1FFF F800

1.程序存储器

程序存储器,存储程序的部分,采用分页存储的方式。

(1)可以在程序存储器未占用的部分,存储一些重要参数。

(2)IAP:通过程序修改FLASH中的程序文件,如果是远程的话就是OTA

1. 程序存储器全擦除

将程序存储器中的全部数据清除

2.程序存储器页擦除

指定特定页进行页擦除

3.程序存储器写入

### STM32 Flash 闪存使用教程和特性 #### 一、STM32 Flash 基本概念 STM32微控制器中的Flash是一种非易失性的存储器,即使电源关闭也能保存数据。这种特性使得Flash适合用于长期存储应用程序代码以及一些重要的配置参数等信息[^3]。 对于STM32而言,其内部Flash主要分为三个部分:系统存储器(System Memory),位于地址空间`0x1FFFF000`处;选项字节(Option Bytes),位于`0x1FFDhF800`位置;还有就是用户可编程的主要区域即主存储区(Main Memory)[^4]。 #### 二、STM32 Flash 特性说明 - **非易失性**:当设备掉电之后,Flash内的数据不会丢失,这保证了程序的安全性和稳定性。 - **按扇区擦除**:不同于传统的EPROM或EEPROM能够逐位修改的方式,Flash是以整个扇区为单位来进行擦除操作的。这意味着一旦决定要更新某个特定位置的内容,则该位置所在的整个扇区都需要被清除后再重新写入新内容。 - **有限次数的擦写周期**:尽管具有良好的耐用度,但每片Flash都有一定的最大允许擦写次数限制。因此,在设计过程中应当注意合理规划数据记录逻辑以减少不必要的擦写动作。 - **快速随机访问能力**:得益于较低的时间延迟特点,Flash特别适用于频繁发生的小规模读取场景下的高效工作模式[^2]。 #### 三、基于HAL库实现Flash基本操作实例 为了方便开发者进行Flash的操作,意法半导体提供了专门针对STM32系列MCU优化过的硬件抽象层(HAL Library)。以下是利用此库完成简单Flash编程的一个Python伪代码例子: ```c #include "stm32f4xx_hal.h" // 定义待写入的数据缓冲区及其长度 uint32_t data_to_write[] = {0x12345678, 0x9ABCDEF0}; size_t buffer_size = sizeof(data_to_write)/sizeof(uint32_t); // 初始化Flash接口并解锁保护机制以便后续操作 HAL_FLASH_Unlock(); // 设置页/半页编程命令前准备阶段... if (HAL_FLASHEx_DATAEEPROM_Unlock() != HAL_OK){ Error_Handler(); } for(int i=0; i<buffer_size ;i++){ // 执行实际的数据写入过程... if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, ADDRESS+i*8 ,data_to_write[i])!= HAL_OK){ Error_Handler(); } } // 锁定Flash防止意外更改 HAL_FLASH_Lock(); ``` 上述代码片段展示了如何通过调用ST官方提供的API函数来安全可靠地向指定地址范围内连续写入多个四字节数值。需要注意的是真实项目中还需要考虑错误处理等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值