c语言flash里能存文件吗,STM32内部FLASH打包读写

本文档详细介绍了如何在STM32F030F4P6单片机的内部FLASH中存储和读取uint8_t数据。通过定义数据包结构,包括报头、长度和数据段,确保数据的正确存储和读取。程序包含解锁、页擦除、写入和读取操作的步骤,并提供了相关函数的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做到的项目在运行需要把一组uint8_t(unsigned char)的数据进行掉电储存,想到单片机STM32f030f4p6内部flash可以直接由程序操作,写了以下代码用于uint8_t数据打包保存和读取。

1、程序清单 与 测试结果

本程序包含5个文件,分别是:

1、Flash.c:内部flash读取储存相关函数

2、Flash.h:flash头文件

3、USART1.c:STM32F030F4P6的串口驱动,串口仅用于打印数据观察。

4、USART1.h:串口头文件

5、main.c:防止程序主入口

1、Flash.c

d96fdfb51c10d64aad044b6c2cdc1185.gif 

View Code

2、Flash.h

51bb8e22375e2e057400925866c7b50e.gif 

View Code

3、USART1.c

2ddee313243205276f6219e69f3ef7e4.gif 

View Code

4、USART1.h

c639616a8140735afc2e9ca05304cb6b.gif 

View Code

5、main.c

b630dd783fe6e72f1afb467f7b52b593.gif 

View Code

测试结果:

第54-199省略..

34ea0a1b9b8fe07a0b1933442ec8b595.png

2、程序详解

2.1、内存结构:

STM32F0xx的flash结构如下:最多具有64页,每页1KByte大小。

我使用的STM32F030F4P6 flash区域有16K,所以实际上只有0-15页,本程序中把需要保存的数据数据存放在最后一页(第15页)中。

330cd9f72ac67f5b55302ee8e4cbdfe1.png

2.2、定义数据包结构

为了保证储存和读出flash的数据是正确的,本程序将写入flash数据分为3个区域

报头区:写入数据的时候,将第15页的第1、2字节写入0xaa55,在读出的时候如果此位置不是0xaa55,则表示这段数据数据无效,不是由自己存入的数据或者程序出现了异常;

长度:写入数据的时候,第15页的第3、4字节写入有效数据的长度,读出这个字段,就知道上次自己一共存入了多少数据;

数据段:从第15页的第5字节开始,全部字节(1020byte)用于储存uint8_t类型的数据;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值