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     

和手册里的值相等

  STM32 寄存器地址名称映射_第1张图片

gpio其他寄存器地址从首地址依次加四。此部分介绍在《stm32不完全手册-库函数版》p104页有介绍。





你可能感兴趣的:(嵌入式开发)