• 173华大单片机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的数组,然后

    移植使用

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

    结语

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

  • 相关阅读:
    Spring框架构造注入的属性问题type属性
    Spring框架AOP添加日志记录功能
    Spring框架构造注入
    Spring框架AOP原理
    Spring框架构造注入的顺序问题index属性
    Spring框架使用P命名空间进行注入
    工作中的SQL脚本
    spring框架ioc设置注入小demo
    [笔试] C和C++动态内存分配和释放的区别
    [算法] 当今世界最为经典的十大算法投票进行时
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/15708263.html
Copyright © 2020-2023  润新知