用STM32_FLASH模拟实现EEPROM功能

电子说

1.2w人已加入

描述

一、

在工业应用中经常使用EEPROM来存储数据,为降低成本、节省PCB空间,外部EEPROM可以用片内Flash加上特定的软件算法代替。

因为片内Flash的擦写次数有限,所以要加上特定算法来增加使用寿命。此算法ST提供了历程,我们可以移植到我们的程序里直接使用,比较方便。

二、源码移植

移植很简单,一共两个文件“eeprom.c","eeprom.h",移植前需要准备选择至少2块连续大小相同的flash扇区,示例程序中选用的是16K大小的2、3扇区。现在打开“eeprom.h”文件。移植时需要修改的内容:

HAL库

好了移植完成,注意此源码是基于HAL库的,也可以自己修改flash读写程序,之前我将这个移植到GD的芯片,这个还是很方便的。

三、使用方法

在“eeprom.h”文件中的最下方可以看到对外的功能函数

HAL库

我们首先需要将EE_Init()函数在主函数中调用初始化。剩下两个EE_ReadVariable( uint16_t VirtAddress, uint16_t* Data )和EE_WriteVariable( uint16_t VirtAddress, uint16_t Data )函数是我们将用到的FLASH读写函数。

这里需要注意这两个函数都有一个输入参数,这是一个虚拟地址,也就是一个将来寻找我们存储内容的地址。

例如,示例程序中,要存储3个变量值,分别给这3个变量一个虚拟地址,0x5555, 0x6666, 0x7777 当然你也可以不用这个三个值作为虚拟地址。

HAL库

将VarValue值分配虚拟地址为0x5555后通过EE_WriteVariable函数写入flash,然后根据0x5555这个地址使用EE_ReadVariable函数将刚刚存储的值读到VarDataTab数组里。如下图。

HAL库

使用起来同样简单。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分