#define GPIOA ((GPIO_typedef *) GPIOA_BASE 此预处理将GPIOA变成GPIO_typedef 类型的结构体指针,默认指向了GPIOA的基地址首。在调用->指向不同结构体成员时,指针就会根据成员变量类型的大小跳不同的步进,进而访问到不同的成员地址,对不同成员地址(其实就是GPIO的各功能寄存器)赋值处理就完成操作GPIO。这是我...
这是宏定义,是预编译命令。即,在正式编译程序前,先做字符串替代,替代完毕再编译。例如:define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)预编译命令 说,凡后面程序中出现 GPIOA 的地方,把 GPIOA 换成:((GPIO_TypeDef *) GPIOA_BASE) 后再编译。后面的 #define 命令 类似。例如...
((GPIO_TypeDef *) GPIOA_BASE)表示将GPIOA_BASE强制转换为指针类型的结构体, #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) 表示用(GPIO_TypeDef *) GPIOA_BASE代替GPIOA ,那么现在GPIOA就表示以 GPIOA_BASE为基地址的一个类型为 GPIO_TypeDef结构体的一个指针,所以你程序里可以用G...
GPIO_TypeDef是一个结构体,里面定义了GPIO的常用寄存器,GPIOA_BASE是GPIOA的基地址,#define GPIOA_...
///((GPIO_TypeDef ) GPIOB_BASE)或((GPIO_TypeDef ) xxxx)/// #define GPIOA ((GPIO_TypeDef*)GPIOA_BASE) 1)GPIOA_BASE被强制转换为地 址
预编译命令 说,凡后面程序中出现 GPIOA 的地方,把 GPIOA 换成:((GPIO_TypeDef *) GPIOA_BASE) 后再编译。后面的 #define 命令 类似。例如#define GPIOI ((GPIO_TypeDef *) GPIOI_BASE)即 凡后面程序中出现 GPIOI 的地方,把 GPIOI 换成:((GPIO_TypeDef *) GPIOI_BASE) 后再编译。---另外:(GPIO...
__IO uint32_t LCKR;} GPIO_TypeDef;#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)#define ...
#define PERIPH_BASE ((u32)0x40000000)//端口地址#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)//端口地址#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)//端口地址#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)//不明白,这个预定义//把GPIOA_BASE看成指向GPIO_TypeDef结构体的指针吗,GPIOA代表...
1、#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)这句话我给你简单翻译一下:GPIOA首先是一个指向地址GPIOA_BASE的指针,指针类型为一个GPIO_TypeDef类型的结构体,也就是说GPIOA指向的结构体第一个成员为GPIOA的第一个寄存器,而这第一个寄存器的地址偏移一般是0,也就是说第一个寄存器的地址就是GPIOA_BASE...