一、
在工业应用中经常使用EEPROM来存储数据,为降低成本、节省PCB空间,外部EEPROM可以用片内Flash加上特定的软件算法代替。
因为片内Flash的擦写次数有限,所以要加上特定算法来增加使用寿命。此算法ST提供了历程,我们可以移植到我们的程序里直接使用,比较方便。
二、源码移植
移植很简单,一共两个文件“eeprom.c","eeprom.h",移植前需要准备选择至少2块连续大小相同的flash扇区,示例程序中选用的是16K大小的2、3扇区。现在打开“eeprom.h”文件。移植时需要修改的内容:
好了移植完成,注意此源码是基于HAL库的,也可以自己修改flash读写程序,之前我将这个移植到GD的芯片,这个还是很方便的。
三、使用方法
在“eeprom.h”文件中的最下方可以看到对外的功能函数
我们首先需要将EE_Init()函数在主函数中调用初始化。剩下两个EE_ReadVariable( uint16_t VirtAddress, uint16_t* Data )和EE_WriteVariable( uint16_t VirtAddress, uint16_t Data )函数是我们将用到的FLASH读写函数。
这里需要注意这两个函数都有一个输入参数,这是一个虚拟地址,也就是一个将来寻找我们存储内容的地址。
例如,示例程序中,要存储3个变量值,分别给这3个变量一个虚拟地址,0x5555, 0x6666, 0x7777 当然你也可以不用这个三个值作为虚拟地址。
将VarValue值分配虚拟地址为0x5555后通过EE_WriteVariable函数写入flash,然后根据0x5555这个地址使用EE_ReadVariable函数将刚刚存储的值读到VarDataTab数组里。如下图。
使用起来同样简单。