不同的stm32单片机的flash大小不同,这个需要查阅芯片手册或者查看STM32CubeMX软件。
stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,要操作flash时注意不要超出此范围。
Flash中的内容一般用来存储代码和一些定义为const的数据,和一些用户自定义的保存数据,它断电不丢失。
不同型号的单片机对flash的操作方式略有不同。下面我以自己用到的STML4R9VIT6为例贴上代码。
STM32的内部 FLASH 包含主存储器、系统存储器、 OTP 区域以及选项字节区域,具体分部查看响应的数据手册。
flash的写机制,只能将存储区域的1改为0,从0改为1只能选择擦除(页擦除或者扇区擦除),一次性擦除多个字节。
flash的读机制,只需要从flash的地址中读取数据就行了,可以字节读取,也可以按字读取。具体操作看代码。
首先需要说明的是,stm32内部flash空间包含多个用途,在保存自定义的数据时,千万不要去操作正在使用的区域。
其次,stm32是小端模式,数据的高字节保存在内存的高地址中, 而数据的低字节保存在内存的低地址中, 这种存储模式将地址的高低和数据位权有效地结合起来, 高地址部分权值高,低地址部分权值低。
//针对STM32L4R9VIT6单片机,通过地址获取所在页的函数如下
uint32_t getPage(uint32_t Address)//获取地址所在的
{
uint32_t page = 0;
if (Address < (FLASH_BASE