STM32读写flash

写FLASH的流程

1、解锁FLASH_Unlock();
2、擦除你要写的扇区或者页;
FLASH_Status FLASH_ErasePage(uint32_t Page_Address);
FLASH_Status FLASH_EraseAllPages(void);
FLASH_Status FLASH_EraseOptionBytes(void);
3、向该地址写入你要写的数据32bit数据类型/16bit数据类型/8bit数据类型;
FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data);//一次写一个字,对于32系统,一次写的是4个字节,uint32_t 变量大小,32bit
FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data);//一次写一个半字,对于32系统,一次写的是2个字节,uint16_t 变量大小,16bit
FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data);//一次写一个字节,对于32系统,一次写的是1个字节,uint8_t 变量大小,8bit
4、上锁FLASH_Lock();
#include "stm32f10x_flash.h"在这个文件里都有相关的库函数,很简单,一眼就看出来你需要哪一个了;

读FLASH的流程

直接复制这个就行
uint16_t FLASH_ReadHalfWord(uint32_t address)
{
return (__IO uint16_t)address;
}

STM32F1系列的哈flash官方介绍

在这里插入图片描述
有四类flash大小的产品:
1、32K
2、128k
3、512kk
4、256k四种类型

那我们要读写flash要知道它的地址,才可以去操作;
我们直接看大容量产品
在这里插入图片描述
首先我们知道地址是从0x0800 0000开始的,那我们要避开起始地址和你其他程序占用的地址;
比如你的程序大小是2k,也就是0x800;那么你只能在0x0800 0000+0x800之后去操作空余的flash,注意留点余量,这里仅作举例参考。
那地址最多就是上图的最后一页的结束地址0x0807FFFF;