STM32芯片架構簡圖 STM32F10xx系統框圖
一、什么叫存儲器映射
存儲器本身不具有地址信息,它的地址是由芯片廠商或用戶分配,給存儲器分配地址分配地址的過程就稱為存儲器映射。
分配地址后,會使用指針去操作內存地址。
二、什么是寄存器?
有特定功能的內存單元,通常我們會給這個特殊的內存單元取一個名字,這個給已經分配好地址的有特定功能的內存單元取別名的過程就叫寄存器映射。
三、什么叫重映射?
給存儲器分配地址的過程叫存儲器映射,在分配一個地址叫重映射。
四、通過寄存器訪問訪問內存單元的幾種方式
1、通過絕對地址去訪問
讓GPIOB端口的16個引腳輸出高電平,要怎么實現?
絕對地址=外設起始地址+寄存器偏移地址
比如現在我們要找GPIOB的絕對地址,可以查STM32芯片手冊,可以看到起始地址為0x40010C00
然后再找到端口輸出數據寄存器(ODR)的偏移地址
物理地址=0x40010C00 + 0x0C=0x40010C0C
要讓16個引腳都輸出高電平
*(unsigned int *)(0x40010C0C) = 0xFFFF;
2、通過寄存器別名的方式訪問內存單元
#defined GPIOB_ODR (unsigned int *)(0x40010C0C) *GPIOB_ODR = 0xFF;
為了方便操作,我們干脆把指針操作“*”也定義到寄存器別名里面
#define GPIOB_ODR *(unsigned int*)(0x40010C0C) GPIOB_ODR = 0xFF;
GPIOB_ODR & = ~(1<<0); // 讓PB0輸出低電平 GPIOB_ODR & |= (1<<0) // 讓PB0輸出高電平