STM32F1 - 存储器映射

Memory mapping

  • 1> 外设内存地址映射
  • 2> GPIO寄存器映射
  • 3> 存储器访问


1> 外设内存地址映射

STM32F1 - 存储器映射_第1张图片
1> STM32F103ZET6的地址线位宽为32位,所以寻址空间为4GB (2 ^ 32 = 4GB);
2> STM32将,Flash,SRAM,外设寄存器,等都有规律的安排到4GB的空间;

STM32F1 - 存储器映射_第2张图片


2> GPIO寄存器映射

STM32F1 - 存储器映射_第3张图片

GOIOA的映射地址是多少?

因为Poart A的基地址是:【0x4001 0800】
所以GPIOA寄存器的地址就是,0x4001 0800+偏移地址,
例如,GPIOA_CRL的地址就是【0x4001 0800 + 0x00】
GPIOA_CRH的地址【0x4001 0800 + 0x04】;


3> 存储器访问


想象成取快递:
STM32F1 - 存储器映射_第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的空间,想象成春笋大厦:
STM32F1 - 存储器映射_第5张图片

你可能感兴趣的:(STM32F1-外设驱动,stm32,嵌入式硬件,单片机)