前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >17-3-华大单片机HC32F460系列flash存储方案

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

作者头像
杨奉武
发布2021-12-21 09:29:47
2.2K0
发布2021-12-21 09:29:47
举报
文章被收录于专栏:知识分享

说明

因为用到了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=%d\r\n",data);

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

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

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

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

3.如果存储字符串

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

移植使用

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

结语

代码写多了呢其实写的是思路和思想,当然好的思路和思想需要建立在(不会表达了.....)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
  • 关于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存储数据
                      • 4.读取存储的数据(直接从数组获取) 推荐
                        • 因为数组里面的值就是存储在flash里面的,所以数组里面的值就是存储在flash里面的值
                      • 5.读取存储的数据(从flash里面获取)
                        • 这个函数一般用于查看下存储的对不对, 不过需要是调用完flash_helper_update函数以后, 然后接着使用
                        • 例如,获取刚刚数组的第一位存储在flash里面的值
                        • 例如,获取多个(下面的例子是获取前两位)
                    • 推荐使用方式(新建一个falsh_data文件)
                      • 1.存储数据如果一个u32就存储一个数据显得有些浪费,咱们应该使用共用体来操作一下
                        • 2.然后举个例子(让一个u32可以存储多个数据)
                          • 3.如果存储字符串
                            • 假设这个字符串最大不到1024字节, 咱可以先建一个1024的数组,然后
                        • 移植使用
                          • 把下面的文件放到自己的工程里面即可
                          • 结语
                            • 代码写多了呢其实写的是思路和思想,当然好的思路和思想需要建立在(不会表达了.....)
                            相关产品与服务
                            对象存储
                            对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档