HAL库实现内部FLASh清除,存储

为了让数据不再掉电清零,百度一堆终于找到一个解决方案,调试一天,终于调试成功这个功能了。为了防止忘记(节约大家像我一样白忙活的时间)写个博客记录一下,首先打开.map文件。找不到的编译
在这里插入图片描述
成功后双击上图就会弹出来,如果没有就找到编译生成的文件夹,在hex文件下面,打开map文件,滑到最下面,可以看到程序所占内存有多大,如图在这里插入图片描述
18840转化为16进制为4998,所以程序所占空间加上0x08000000等于0x08004998,数一数看看在第几页在这里插入图片描述
之后,在没用到的空间里进行擦除和写入操作即可。
代码实现
1.给flash开锁

HAL_FLASH_Unlock();

2.进行擦除

uint32_t SECTORError = 0;//标志位
FLASH_EraseInitTypeDef EraseInitStruct;
EraseInitStruct.Banks=FLASH_BANK_1;//bank块1
EraseInitStruct.NbPages=2;//清除两个页
EraseInitStruct.Page=31;//从第31页开始
EraseInitStruct.TypeErase=FLASH_TYPEERASE_PAGES;//选择清除方式为页
status=HAL_FLASHEx_Erase(&EraseInitStruct , &SECTORError);

3.写入新数据

status=HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, 0x0800F800, 0x1234567812121122);//属性分别为,写入格式32、64位(好像只能写入64位的),写入地址(和刚才清除的区域对应),写入数据,64位。

4.给flash关锁

HAL_FLASH_Lock();

5.查看写入数据

uint64_t *p,kkknd=0x000000123;
p=(uint64_t *)(0x0800F800);
kkknd=*p;

成功如图
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值