一.简介
STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程
读写FLASH的用途: 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 通过在程序中编程(IAP),实现程序的自我更新 在线编程(In-Circuit Programming – ICP)用于更新程序存储器的全部内容,它通过JTAG、SWD协议或系统加载程序(Bootloader)下载程序 在程序中编程(In-Application Programming – IAP)可以使用微控制器支持的任一种通信接口下载程序
二.Flash操作
1.FLASH解锁
FPEC共有三个键值:RDPRT键 = 0x000000A5 KEY1 = 0x45670123 KEY2 = 0xCDEF89AB
解锁:复位后,FPEC被保护,不能写入FLASH_CR 在FLASH_KEYR先写入KEY1,再写入KEY2,解锁 错误的操作序列会在下次复位前锁死FPEC和FLASH_CR
加锁: 设置FLASH_CR中的LOCK位锁住FPEC和FLASH_CR
2.使用指针访问存储器
加上_IO volatile(防止编译器优化)
三.Flash擦除
![](https://i-blog.csdnimg.cn/blog_migrate/b2be009f6f42b3753700ddf18368e0fa.png)
四.闪存的写入
五.闪存规划及编程
uint32_t MyFLASH_ReadWord(uint32_t Address)
{
return *((__IO uint32_t*)(Address));
}
uint16_t MyFLASH_ReadHalfWord(uint32_t Address)
{
return *((__IO uint16_t*)(Address));
}
uint8_t MyFLASH_ReadByte(uint32_t Address)
{
return *((__IO uint8_t*)(Address));
}