Flash 中文名字叫闪存,是一种长寿命的非易失性(断电数据不丢失)的存储器。可以对称为块的存储器单元块进行擦写和再编程,在进行写入操作之前必须先执行擦除。一个Nand Flash由多个块(Block)组成,每个块里面又包含很多页(page)。每个页对应一个空闲区域/冗余区域(spare area),这个区域不是用来存储数据的,用于放置数据的校验值检测和纠错的。块,是Nand Flash的擦除操作的基本/最小单位。页,是Nand Flash的写入操作的基本/最小的单位。 首先简要写一下FLASH的读写流程: 对FLASH写入数据 解锁FLASH 擦除FLASH 写入数据到FLASH 锁住FLASH FLASH读取数据 (直接读取相应的FLASH地址即可) 操作MCU里的Flash,还有几个注意事项: 1、往Flash写入数据的时候,要先对要写入的页进行擦除,如果要写的页里有数据,要先读出来在缓存区,再把页擦除,再写入数据;在擦除页之后,只要这次你写的数据大小不够一页,可以连续写入。 2、要计算好程序的内存,因为你的程序也是保存在MCU的Flash里的,如果你操作到保存着程序的内存,程序就会死掉,至于程序内存怎么看,你可以生成bin文件,bin文件的大小就是你程序所占内存的大小了;程序内存基本都是从Flash内存一开始存起的,这里以STM32Fo72c8t6举例,如下图。 看图可以看出,这个芯片的Flash内存范围是 0x0800 0000 ~ 0x0802 0000 ,假设我要烧录进去的bin文件为10K,那我们操作Flash的时候,地址就要从 0x0800 0000 + (0x400*11) 开始,避开程序的存储位置,Flash地址偏移1位就是1个字节。 3、要注意MCU一页的大小,一些MCU一页是1KB,一些MCU一页是2KB - `& m) X4 |+ ?% d6 z* t1 u$ ~ 下面举个例子写入数据 0x0001 到Flash中uint16_t my_add = 0x0001;
写完之后,接着就到读了,Flash写有次数限制,写的次数在1W次还是10W次(忘了)就不可写入了,而读是没有次数限制的,读多少次都可以,下面就把写入到Flash里的数据 0x0001 读出来
经过上面的程序就可以实现 STM32 中 Flash 数据的读写了,具体怎么读写,每个案子不同,各位就可以根据需求去修改,只要注意好注意事项即可,代码已经实测可用。 |
X-NUCLEO-IKS4A1实现手势滑动
STM32G系列RS485自动收发控制以及自适应波特率实战
STM32G0系列ADC扫描序列模式解读
STM32固件库分享,超全系列整理
【经验分享】FPGA作为从机与STM32进行SPI协议通信---Verilog实现
【管管推荐】STM32经验分享篇
STM32G030F6P6基于HAL库模拟SPI驱动1.8寸TFT LCD屏幕
STM32的CAN FD位定时设置注意事项
基于STM32将移植 SBSFU 到 STM32G070过程分享
基于STM32G030 RAM不够用经验分享