1. 程式人生 > >STM32 暫存器地址名稱對映

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頁有介紹。