STM32的FLASH简单应用
主存储块:小容量产品 4K×64位
中容量产品 16K×64位
大容量产品 64K×64位
信息块: 258×64位
闪存模块组织织:
中容量(每页1K)和大容量(每页2K)的参照数据手册。
闪存存储器被组织成32位宽的存储器单元,可以存放代码和数据常数。每一个闪存模块都有一个特定的启始地址。
此次测试目的在于利用闪存存储器存放数据,并不是实现程序烧录功能,所以,只关注存储器的读写,保护功能留待日后再研究。
下面的例子是从0x08008204的地址中读取数据dat,把数据通过串口发送到终端查看,然后修改该地址的数据,再送到终端查看,对照前后两次的数据是否与预期值相符。先看例子:
uint32_t addr = 0x08008204; // 地址
uint32_t dat;
FLASH_Unlock(); // 解除闪存锁
dat = *(uint32_t *)addr; // 读指定地址的数据
send_data(dat); // 把数据送到串口
dat+=0x10;
FLASH_ErasePage(0x08008000); // 擦除页,输入页起始地址
FLASH_ProgramWord(addr,dat); // 对指定地址写数据
dat = *(uint32_t *)addr;
FLASH_EnableWriteProtection(FLASH_WRProt_Pages32to35); // 对页32写保护,有这一句下次就写不入了
FLASH_Lock(); // 锁住闪存
send_data(dat); // 前后数据对照
分析:
本例子基于64K的中容量产品,每页是1K字节,0x08008204属于第32页。关于FLASH_ErasePage函数的输入值,只要是第32页内的地址都可以。
要注意的是,闪存在写数据前必须先进行擦除,而且只能页擦除,不能单字节擦除。至于为什么,查看闪存的内部结构,这里不多说。
STM32Flas 相关文章:
- 分享STM32 FLASH 擦除(以及防止误擦除程序代码)、写入(12-01)
- stm32的flash如何写数据和当做eerom使用(11-27)
- 关于STM32的FLASH操作(11-26)
- stm32 Flash读写(11-23)
- STM32 使用 Flash 存储数据时的一种管理办法(11-13)
- stm32 Flash 模拟EEPROM(11-13)