STM32的Flash读写浮点数 HAL库

电灯熄灭 物换星移 泥牛入海

单片机为单片机涨价前时代购入的四块STM32F103C8T6之一。

相关库函数

	HAL_FLASH_Unlock();	//解锁Flash
    HAL_FLASHEx_Erase(&FlashTest,&Error);	//擦除对应页(必须先擦除不然写不进去)
    HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,Addr,*(uint32_t *)(&data));
    //以字写入的方式写入
    HAL_FLASH_Lock();	//锁上Flash

地址计算

STM32F103C8T6的Flash大小为64K,从0x0800 0000开始计算,最后一个字节的地址为0x0801 8FFF=8000000H+64*400H-1。

PageAddres
Page00x0800 0000 - 0x0800 07FF
Page310x0801 8800 - 0x0801 8FFF

程序实现

想到以后可能会用到存储控制器参数的需要,这里尝试存储与读取一个浮点数。

存储步骤

	uint32_t Addr = 0x8018800;//存储地址
    float data = 123.321;	//定义测试浮点变量
	FLASH_EraseInitTypeDef FlashTest;	//定义擦除操作结构体
    FlashTest.PageAddress=Addr;			//擦除页开始地址,每2K为一页
    FlashTest.NbPages=1;				//要擦除的页数1页
    FlashTest.TypeErase=FLASH_TYPEERASE_PAGES;//页擦除方式
	HAL_FLASH_Unlock();	//解锁Flash
    HAL_FLASHEx_Erase(&FlashTest,&Error);	//擦除对应页(必须先擦除不然写不进去)
    HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,Addr,*(uint32_t *)(&data));
    //以字写入的方式写入,浮点数据要用指针直接写入64位
    HAL_FLASH_Lock();	//锁上Flash

读取步骤

float readdata;	//定义读取变量
readdata=*(float *)Addr;	//利用指针读取浮点数据

其他

  1. 每次写入必须要对对应页进行擦除操作
  2. 写入之后如果新的程序较小,没有覆盖到之前的页中,并且没有进行全片擦除,则新程序仍可以读取到之前程序写入的数据。
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值