c语言 将结构体放在flash,stm32的内部flash读写操作(含结构体的保存)

本文介绍了如何在STM32的内部Flash中进行读写操作,特别是针对结构体的保存。讲解了Flash的地址范围、擦除与写入机制,并提供了STM32L4R9VIT6单片机的示例代码,包括获取页和Bank的函数、擦除和写入Flash的函数。同时,文中强调了小端模式下数据存储的特性,并给出了结构体数据在Flash中的读写方法。
摘要由CSDN通过智能技术生成

不同的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值