打印
[应用相关]

stm32闪存的理解

[复制链接]
378|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
keaibukelian|  楼主 | 2021-8-4 12:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32f1xxx的闪存模块由:主存储器、信息块和闪存存储器接口寄存器等3部分组成。

各个部分的大小因不同型号有一定的差异,数据手册中可以看到



小容量产品主存储块1-32KB,每页1KB。系统存储器2KB。

中容量产品主存储块64-128KB,每页1KB。系统存储器2KB。

大容量产品主存储块256KB以上,每页2KB。系统存储器2KB。



主存储器:该部分用来存放代码和数据常数(如const类型的数据)。对于大容量产品,其被划分为256页,每页2K字节。注意,小容量和中容量产品则每页只有1K字节。从上图     可以看出主存储器的起始地址就是0X08000000, B0、B1都接GND的时候,就是从0X08000000开始运行代码的。

信息块:该部分分为2个小部分,其中启动程序代码,是用来存储ST自带的启动程序,用于串口下载代码,当B0接V3.3,B1接GND的时候,运行的就是这部分代码。用户选择字                   节,则一般用于配置写保护、读保护等功能

闪存存储器接口寄存器:该部分用于控制闪存读写等,是整个闪存模块的控制机构。



在进行内部flash模仿eeprom时可以操作主存储器部分的空间,程序代码占一部分,留下一部分用于存储你想要存储的信息,只是模拟的eeprom的读写操作还是要遵循flash的操作方法,另外还需要注意stm32闪存操作的流程注意事项





FLASH_Unlock();//解锁

FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);//清楚标志

FLASH_ErasePage(0x8002000);//擦除

while(count < 5)
{
  FLASH_ProgramHalfWord((0x8002000 +count*2),data[count]);  //flash  为一个字节存储,16位数据必须地址加2

  count++;

}

FLASH_Lock();//加锁


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

3905

帖子

5

粉丝