本帖最后由 wandersky 于 2022-5-6 17:28 编辑
STM32内部FLASH模拟E2PROM 代码参考了STM32官方的例程与网友“半壶水”的程序。
使用内部FLASH的最后一个扇区来模拟E2PROM来保存经常改变的参数。 此参数以参数结构体的形式保存在flash中
struct element{
uint16_t addr;
uint8_t dat[30];
};
其中addr为参数地址标示,用来区别不同的参数。 dat[30],为有效参数空间,最大可以保存30B,如果需要扩展,可以把此结构体的扩展到32B的整数倍即可,为了兼容STM32H7系统内部FLASH。 例程使用的是STM32H743 nucleo板子, 上电会初始化ele1默认值为0,当USER按键按下1次,ele1值加1。
使用说明:
1.对BASS_ADDR_EMU_FLASH首地址做定义(不定义则使用最后一个扇区作为模拟FLASH)
2.上电后先初始化,e2prom_init()
3.初始化后就可以读写要保存的参数了。
4.寿命:如果只有1个参数, 128k/32*10000=4000W次,能满足大多数需求
5.存在问题:当存储数据的FLASH写满时,这时需要擦除块操作,如果此时板子断电重启,则保存的所有参数将丢失。
源码地址https://github.com/wanderksy/e2prom |