首先我们的存储地方位于 主存储块 但是这些我们不是全能用的
这部分也会存放我们的代码部分 所以 如果你烧录进去代码 随后在页0,1,2会直接覆盖代码部分导致死机。所以通常都是用最后末尾的。
HAL库使用流程
主用四个函数
HAL_FLASH_Unlock();
HAL_FLASHEx_Erase(&My_Flash,&FlashError);
HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD,a,test)
HAL_FLASH_Lock();
在进行任何操作前都是要解锁 完成后加锁.
擦除函数的参数 第一个是结构体 我们需要自己创建并且赋值
void FLASH_init(void)
{
My_Flash.PageAddress = a;
My_Flash.TypeErase=FLASH_TYPEERASE_PAGES;
My_Flash.NbPages = 1;
}
pageAddress就是对应途中的页地址开头
My_Flash.TypeErase则是擦除方式 我们这里是擦除页
NbPages是擦除的页数。
HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD,a,test)
第一个参数后很多个 word halfword 等等 word对应的是当前设备cpu一次性处理的字节
我们stm32f103是32位 word 如果我们要存储 uint16_t 就是halfword
a就是地址 test则是我们的存储数据 可以是int double float
浮点数存储
FLASH_TYPEPROGRAM_HALFWORD 这些参数要求整数类型
所以存储float可不是意味着 就是使用HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD,a,test)把test换成什么float类型什么的这么简单
需要把 float test 传入的时候转成 *(uint32_t*)&test 取出来 则是正常读取float*就可以了