STM32 暫存器地址名稱對映
stm32韌體庫內可以看見指向結構體的指標,其賦值如下:
例:GPIOA->ODR=0x00000000; 此句是為ODR暫存器賦值為0x00000000;
在stm32f10x.h檔案裡定義了以下結構體
typedef struct
{
__IO uint32_t CRL;
__IO uint32_t CRH;
__IO uint32_t IDR;
__IO uint32_t ODR;
__IO uint32_t BSRR;
__IO uint32_t BRR;
__IO uint32_t LCKR;
} GPIO_TypeDef;
然後 定位GPIO_TypeDef,到 #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
發現 GPIOA_BASE被強制轉換為GPIO_TypeDef指標。注意:C語言裡,用p->num格式表示p所指向結構體中的num成員。
繼續定位 GPIOA_BASE,發現其是 #define GPIOA_BASE (APB2PERIPH_BASE + 0x0800) 為基址加變址
繼續定位APB2PERIPH_BASE :#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
繼續定位PERIPH_BASE :#define PERIPH_BASE ((uint32_t)0x40000000) 發現其為一個地址
把地址相加,0x0800+0x10000+0x40000000=0x40010800
和手冊裡的值相等
gpio其他暫存器地址從首地址依次加四。此部分介紹在《stm32不完全手冊-庫函式版》p104頁有介紹。