stm32的内部flash读写操作(含结构体的保存)

不同的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是小端模式,数据的高字节保存在内存的高地址中, 而数据的低字节保存在内存的低地址中, 这种存储模式将地址的高低和数据位权有效地结合起来, 高地址部分权值高,低地址部分权值低。 

其中有个重要的东西是FLASH_EraseInitTypeDef结构体

然后下面是写flash操作

这里详细解说一下HAL_FLASH_Program()函数,函数原型如下

读数据就很简单了

来源:瑟寒凌风

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年4月16日
下一篇 2020年4月17日

相关推荐