17-3-华大单片机HC32F460系列flash存储方案

<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/单片机知识点总结/directory.html" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

 

说明

因为用到了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存储数据

 

 

//初始化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里面的值

 

 

 

 

 

flash_helper_struct.FlashHelperData[0]

flash_helper_struct.FlashHelperData[1]

 

 

5.读取存储的数据(从flash里面获取)

 

 

这个函数一般用于查看下存储的对不对, 不过需要是调用完flash_helper_update函数以后, 然后接着使用

例如,获取刚刚数组的第一位存储在flash里面的值

 

 

 

 

uint32_t data;

flash_helper_get(0,&data,1);
printf("get0=%d\r\n",data);

 

 

 

 

例如,获取多个(下面的例子是获取前两位)

 

 

 

 

 

 

推荐使用方式(新建一个falsh_data文件)

1.存储数据如果一个u32就存储一个数据显得有些浪费,咱们应该使用共用体来操作一下

 

 

2.然后举个例子(让一个u32可以存储多个数据)

 

 

 

 

 

 

 

 

 

 

3.如果存储字符串

假设这个字符串最大不到1024字节, 咱可以先建一个1024的数组,然后

 

 

 

 

 

 

移植使用

把下面的文件放到自己的工程里面即可

 

 

结语

代码写多了呢其实写的是思路和思想,当然好的思路和思想需要建立在雄厚的底子之上

 

posted on 2021-12-19 19:13  广源时代  阅读(1687)  评论(0编辑  收藏  举报

导航

支付宝 QQ群