把自己项目里用的一个STM32片上Flash存储库拿出来开源了,地址在最后。
-
适合学生做课程设计、毕设,需要存点参数掉电不丢,拿来直接用,几行代码搞定。
-
做产品的工程师,存校准值、序列号、WiFi密码、PID系数这些,不用自己维护地址表,按名字增删改查就行。
-
搞Bootloader,在APP和Bootloader之间传升级标志、固件版本,划个独立区域互不干扰。
主打轻量化。没有复杂文件系统,不依赖外部存储芯片,直接操作片上Flash。RAM索引表大小可配置(默认64条记录),资源紧张的MCU也能跑。如果你需要完整的事务日志、磨损均衡或者加密这些重型功能,那它有更合适的选择;如果只是想轻量地存几十条配置参数,不折腾、够用就行,那这个库应该对胃口。
特点:
-
掉电安全:写一半断电不会坏数据,重启自动忽略不完整的记录。
-
管理方便:每条记录带个描述符,查询删除直接按名字来。
-
能压缩回收:写满了可以按规则清理无效记录,不用手动擦整片。
-
支持RTOS(带FreeRTOS模板),多线程调用无压力。
目前F1和F4全系列都支持。由于直接操作寄存器,不依赖任何库的API,因此只要芯片的寄存器定义文件(如stm32f1xx.h)在,HAL/LL/标准库都能用,换工程无压力。最近刚更新了一版,修了些细节,README也补全了。后续如果有bug或者新需求,我会继续维护,后面打算加入更多系列支持,有这个需求的可以提个Issue催我。
工程建议:
强烈建议把Flash分区搞成 Bootloader | 配置区 | APP,物理隔离,防止固件膨胀后把配置擦没了。
代码仓库里README写得很细,移植指南、API参考都有,基本改个头文件就能用。
最后,如果觉得有用,麻烦点个⭐Star ,让更多人看到。遇到问题或者有需求,欢迎提Issue。
仓库地址:https://github.com/R6bandito/stm32-flash-kv

(部分API使用例子)

(flash管理区数据表打印)