存储器映射
被控单元的FLASH,RAM,FSMC 和AHB 到APB 的桥(即片上外设),这些功能部件共同排列在一个4GB 的地址空间内。我们在编程的时候,可以通过他们的地址找到他们,然后来操作他们(通过C 语言对它们进行数据的读和写)。
存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射。如果给存储器再分配一个地址就叫存储器重映射。
1. 存储器区域功能划分
在这4GB 的地址空间中,ARM 已经粗线条的平均分成了8 个块,每块512MB,每个块也都规定了用途。每个块的大小都有512MB,显然这是非常大的,芯片厂商在每个块的范围内设计各具特色的外设时并不一定都用得完,都是只用了其中的一部分而已。
在这8 个Block 里面,有3 个块非常重要,也是我们最关心的三个块。Block0 用来设计成内部FLASH,Block1 用来设计成内部RAM,Block2 用来设计成片上的外设,下面我们简单的介绍下这三个Block 里面的具体区域的功能划分。
存储器Block0 内部区域功能划分
Block0 主要用于设计片内的FLASH,我们使用的STM32F103ZET6(霸道)和STM32F103VET6(指南者)的FLASH 都是512KB,属于大容量。要在芯片内部集成更大的FLASH 或者SRAM 都意味着芯片成本的增加,往往片内集成的FLASH 都不会太大,ST 能在追求性价比的同时做到512KB,实乃良心之举。
储存器Block1 内部区域功能划分
Block1 用于设计片内的SRAM 。我们使用的STM32F103ZET6 ( 霸道) 和STM32F103VET6(指南者)的SRAM 都是64KB。