Memory mapping
1> 外设内存地址映射
1> STM32F103ZET6的地址线位宽为32位,所以寻址空间为4GB (2 ^ 32 = 4GB);
2> STM32将,Flash,SRAM,外设寄存器,等都有规律的安排到4GB的空间;
2> GPIO寄存器映射
GOIOA的映射地址是多少?
因为Poart A的基地址是:【0x4001 0800】
所以GPIOA寄存器的地址就是,0x4001 0800+偏移地址,
例如,GPIOA_CRL的地址就是【0x4001 0800 + 0x00】
GPIOA_CRH的地址【0x4001 0800 + 0x04】;
3> CPU能看见的就是4G空间
4> 存储器访问
想象成取快递:
存储器的访问,可以想象成在菜鸟驿站取快递
例如,读写 寄存器GPIOA_CRH, 他的地址是【0x4001 0800 + 0x04】;
unsigned int *pCRH = (unsigned int *)0x40010804
unsigned int tmp = 0;
tmp = *pCRH; // 读GPIOA_CRH,也就是取0x40010804地址存的内容
*pCRH = 0xFFFFFFFF; // 写GPIOA_CRH,也就是向0x40010804地址存0xFFFFFFFF
// 为方便使用,写成:
#define GPIOA_CRH *(unsigned int *)0x40010804
把4GB的空间,想象成春笋大厦: