说明
因为用到了HC32F460系列的单片机的flash存储数据,所以写了这套程序.
目的是为了在便于存储.
关于407的Flash
写数据时最小写的单位是 4字节
擦除的时候,最小擦除的单位是1个扇区(8KB)
读取数据的时候最大读取的位宽是128位(16字节)
关于提供的基本的flash操作函数
1.读取
2.擦除
3.写入
关于本节封装的Flash写读函数思路
1.使用其中一个扇区存储数据,假设使用11扇区,准备一个固定大小(假设是512)的u32类型的数组用来存储数据
记住一句话:只要擦除过了的地方,不需要再次擦除就可以写入数据
在下载程序的时候.默认所有的flash都是已经擦除过的.
2.第一次存储
把整个数组全部写到扇区的最前面
3.第二次存储(不需要擦除,直接写入就可以,因为后面都已经擦除过了)
把整个数组紧接着写到后面
4.第三次存储(不需要擦除,直接写入就可以,因为后面都已经擦除过了)
把整个数组紧接着写到后面
5.假设写到最后了
我后面空了一点是因为定义的数组大小不一样,不一定正好占满.
6.接着再写
检测不够了以后,擦除下这个扇区,把数据从头开始存储.
源码使用
1.我先说一下flash_helper 的使用
2.提示:存储数据的时候是把数据放到这个数组里面
3.使用flash_helper存储数据
代码语言:javascript复制//初始化flash存储
//同时把先前存储的数据读取出来放到 flash_helper_struct.FlashHelperData数组里面
flash_helper_init(32*FLASH_SECTOR_SIZE);//使用第32个扇区存储
//设置存储的数据
flash_helper_struct.FlashHelperData[0]=12345;
flash_helper_struct.FlashHelperData[1]=6666;
//调用函数把数组数据存储到flash
flash_helper_update();
4.读取存储的数据(直接从数组获取) 推荐
因为数组里面的值就是存储在flash里面的,所以数组里面的值就是存储在flash里面的值
代码语言:javascript复制flash_helper_struct.FlashHelperData[0]
flash_helper_struct.FlashHelperData[1]
5.读取存储的数据(从flash里面获取)
这个函数一般用于查看下存储的对不对, 不过需要是调用完flash_helper_update函数以后, 然后接着使用
例如,获取刚刚数组的第一位存储在flash里面的值
代码语言:javascript复制uint32_t data;
flash_helper_get(0,&data,1);
printf("get0=%drn",data);