STM32芯片架构简图
ICode((Instruction)指令总线):
程序编译后的指令存放在内部FLASH中,M3内核通过ICode总线取指,然后再执行指令。
DCode((Data)数据总线):
程序有常量和变量。const修饰的变量为常量存储在内部FLASH中,变量不管是全局变量还是局部变量都存放在SRAM中。由于数据可以被DCode和DMA总线访问,所以就需要经过总线矩阵来仲裁。
Systme(系统总线):
系统总线主要用来访问外设寄存器(即读写寄存器就是通过该总线完成)。
DMA总线():
此总线将DMA的AHB主控接口与总线矩阵相联,总线矩阵协调着CPU的DCode和DMA到SRAM、闪存和外设的访问。
AHB/APB桥(APB):
两个AHB/APB桥在AHB和2个APB总线间提供同步连接。 APB1操作速度限于36MHz, APB2操作于全速(最高72MHz)。
数据转换:
1T = 1024GB(1TByte = 1024GByte)
1G = 1024M(1GByte = 1024MByte)
1M = 1024KB (1M = 1024KByte)
1KB = 1024Byte
1Byte = 8 bit
对于32位计算机来说,1Word = 4Byte。
FLASH, RAM, FSMC 和 AHB 到 APB 的桥(即片上外设),这些功能部件共同排列在一个 4GB 的地址空间内。
存储器映射
存储器本身不具有地址信息,是由芯片厂商或者有个胡分配的,而给存储器分配地址的过程称为存储器映射。
4GB的存储空间分为8个块(block),每个块都有512MB,对应相应的功能。
三个重要块区:Boock0用来设计成内部FLASH,Block1用来设计成内部RAM,Block2用来设计成片上的外设。
Block2地址从0x4000 0000 到 0x5FFF FFFF分配给了我们的片上外设用如GPIO、USART(串口)、I2C、SPI等。
Block0 主要用于设计片内的 FLASH
Block1 用于设计片内的 SRAM
Block2 用于设计片内的外设
外设的总线速度不同, Block 被分成了 APB 和 AHB 两部分,其中 APB 又被分为 APB1 和 APB2
Speed:AHB > APB2 > APB1
存储器 Block2 这块区域,设计的是片上外设,它们以四个字节为一个单元,共 32bit(4字节),每一个单元对应不同的功能。
寄存器映射
给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射,别名称之为寄存器。