求助:#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)

2019-10-12 14:07发布

原子哥资料上说    #define     GPIOA         ((GPIO_TypeDef *) GPIOA_BASE)    这句语句的意思是GPIOA指向
地址GPIOA_BASE(即0x40010800)。请问定义这条语句后GPIOA怎么就指向GPIOA_BASE(即0x40010800)了,
哪位大神能回答下啊?
或者解释下  ((GPIO_TypeDef *) GPIOA_BASE) 这个强制类型转换也可以啊。
谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
it_do_just
2019-10-12 15:41
((GPIO_TypeDef *) GPIOA_BASE)   //这里将GPIOA基地址强制转为了GPIO_TypeDef这个类型的指针

//看看GPIO_TypeDef这个结构体,成员按照定义时的顺序依次存储在连续的内存空间。

typedef struct

{

  __IO uint32_t CRL;      //偏移量0x00

  __IO uint32_t CRH;      //偏移量0x04

  __IO uint32_t IDR;       //偏移量0x08

  __IO uint32_t ODR;      //偏移量0x0C

  __IO uint32_t BSRR;     //偏移量0x10

  __IO uint32_t BRR;      //偏移量0x14

  __IO uint32_t LCKR;     //偏移量0x18

} GPIO_TypeDef;

这样每操作一个结构体成员就达到了操作对应寄存器的地址跟寄存器可以对应上

一周热门 更多>