最近做到的项目在运行需要把一组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
View Code
2、Flash.h
View Code
3、USART1.c
View Code
4、USART1.h
View Code
5、main.c
View Code
测试结果:
第54-199省略..
2、程序详解
2.1、内存结构:
STM32F0xx的flash结构如下:最多具有64页,每页1KByte大小。
我使用的STM32F030F4P6 flash区域有16K,所以实际上只有0-15页,本程序中把需要保存的数据数据存放在最后一页(第15页)中。
2.2、定义数据包结构
为了保证储存和读出flash的数据是正确的,本程序将写入flash数据分为3个区域
报头区:写入数据的时候,将第15页的第1、2字节写入0xaa55,在读出的时候如果此位置不是0xaa55,则表示这段数据数据无效,不是由自己存入的数据或者程序出现了异常;
长度:写入数据的时候,第15页的第3、4字节写入有效数据的长度,读出这个字段,就知道上次自己一共存入了多少数据;
数据段:从第15页的第5字节开始,全部字节(1020byte)用于储存uint8_t类型的数据;