在STM32中对于基地址、外设基地址定义完后,将某个IO口的地址也定义完后,给每个IO口下属的寄存器再进行地址定义过于复杂,故引入了结构体指针,通过结构体指针,使GPIO的的基地址及其后一段寄存器可以通过直接给结构体变量赋值进而对其操作,其中最重要的一段
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
这一段先看后半部分 ((GPIO_TypeDef *) GPIOA_BASE),这一部分就是一个指针的指针变量,那么 #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) 则是把这个指针变量的名字进行了替换,然后同样的对于一个指针而言,指针变量中存放的是对应变量的地址,而在该宏定义中,GPIOA_BASE被转化为指针变量后,其也是一个地址,那么就相当于又把这个地址赋给了GPIOA,也就是说在这段话中实行了以下几个步骤,
1、把GPIOA_BASE转化为结构体指针变量
2、把结构体指针变量的名字替换成为GPIOA
3、把GPIOA_BASE的地址赋给指针变量GPIOA
再说一下自己的另一种理解,
1、把GPIOA_BASE转化为结构体指针变量
2、把结构体指针变量的名字替换成为GPIOA,也就是#define GPIOA_BASE GPIOA;
3、由于定义了GPIOA_BASE是一个地址,然后因为a=b,b=c,那么a=c,所以相当于
#define GPIOA 地址;
版权声明:本文为qq_42765912原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。