+-
Cortex-M3之存储器映射与Flash编程理解

1:STM32的4GB的存储器映射的包含内容:FLASH,RAM,FSMC,AHB与APB桥(APB1,APB2即片上外设),

注:FSMC(Flexible static memory controller)本质上是一个外设,可以扩展内存,如SRAM,但注意只能扩展静态内存即static,而不能是动态的,如SDRAM

2:如下图,4GB的存储映射被分为了8块,每块512M,

BLOCK0:Flash(Code区),用来存放程序

BLOCK1:SRAM,也可以存放程序用于固件升级

BLOCK2: 片上外设

BLOCK3&BLOCK4&BLCOK5:FSMC外部RAM

BLOCK6:未使用

BLOCK7: Cortex-M3的内核外设

... 存储器映射 ... 存储器中的Block0区域

3:对BLOCK0进行细分:

3.1:0x0000 0000~0x0007 FFFF:取决于Boot引脚的配置,为FLASH,SRAM,系统存储区进行映射

...

根据管脚的配置,将不同物理地址映射到第0块的0x0000 0000(启动存储区)

3.2: 0x0800 0000~0x0807 FFFF:程序存放区域

3.3:0x1FFF F000~0x1FFF F7FF:系统存储区,也就是System memory,存放厂商烧写好的isp自举程序(Bootloader),我么使用串口进行程序下载时便会用到这段自举程序

3.4:选项字节区域(Option Bytes):用来配置读写保护,BOR级别,软件/硬件看门狗以及器件处于待机或停止模式下的复位,当芯片不小心被锁住之后,可以从RAM里面修改对应的寄存器位

FLASH编程(STM32)

...

1:FLASH必须在内部或者高速时钟下才能使用

2:内部FLASH空间主要存储的是应用程序,为了防止程序出错所对flash的错误操作,芯片复位后会默认对flash控制寄存器上锁,所以写入前需要先解锁FLASH_Unlock()

3:主存储器页的大小视芯片型号不同,每个页有1k或2k大小(使用超大容量、中容量或小容量产品,它们主存储器的页数量、页大小均有不同),

4:对flash每次操作之前必须要写擦除数据然后才能写入,而对flash的擦除,不能以字节进行擦除,而是要以页的方式进行擦除,而STM32固件库函数FLASH_ErasePage()参数中只要给定该页里的任何一个地址那么就会将该页进行擦除