先定义了 “片上外设”基地址 PERIPH_BASE,接着在 PERIPH_BASE 上 加入各个总线的地址偏移,得到 APB1、APB2 总线的地址 APB1PERIPH_BASE、 APB2PERIPH_BASE,在其之上加入外设地址的偏移,得到 GPIOA-G 的外设地址,最后在 外设地址上加入各寄存器的地址偏移,得到特定寄存器的地址。一旦有了具体地址,就可 以用指...
此预处理将GPIOA变成GPIO_typedef 类型的结构体指针,默认指向了GPIOA的基地址首。在调用->指向不同结构体成员时,指针就会根据成员变量类型的大小跳不同的步进,进而访问到不同的成员地址,对不同成员地址(其实就是GPIO的各功能寄存器)赋值处理就完成操作GPIO。这是我最近理解结构体指针的感悟。
define GPIOA ((GPIO_TypeDef*)GPIOA_BASE)1)GPIOA_BASE被强制转换为地址,空间以GPIO_TypeDef的类型进行构建,首址为GPIOA_BASE,空间内有成员,之间依各自固有类型顺序分配相应空间;2)GPIOA宏展开,即为紧跟其后的具体内容,这样它就是一个指针了:指向以GPIOA_BASE为首址的结构体空间。所以您...
GPIOA_BASE是寄存器的基地址 和GPIOA有关的寄存器有很多,比如ODR、IDR。加12是计算出ODR的偏移。也就是GPIOA_ODR寄存器的地址
#define GPIOA ((GPIO_TypeDef*)GPIOA_BASE) 1)GPIOA_BASE被强制转换为地 址,空间以GPIO_TypeDef的 类型进行 构建,首址为GPIOA_BASE,空间内有成员,之间依各自固有类型顺序分配相应空间; 2)GPIOA宏展开,即为紧跟其后的具体内容,这样它就是一个指针了:指向以GPIOA_BASE为首址的结构体空间。所以您给出GPIOA...
查看GPIOC的定义如下:#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE)GPIOC_BASE是GPIOC模块的起始地址.GPIO_TypeDef 是一结构体,如下.typedef struct{vu32 CRL;vu32 CRH;vu32 IDR;vu32 ODR;vu32 BSRR;vu32 BRR;vu32 LCKR;} GPIO_TypeDef;
1、#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)这句话我给你简单翻译一下:GPIOA首先是一个指向地址GPIOA_BASE的指针,指针类型为一个GPIO_TypeDef类型的结构体,也就是说GPIOA指向的结构体第一个成员为GPIOA的第一个寄存器,而这第一个寄存器的地址偏移一般是0,也就是说第一个寄存器的地址就是GPIOA_BASE...
((GPIO_TypeDef *) GPIOA_BASE)表示将GPIOA_BASE强制转换为指针类型的结构体, #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) 表示用(GPIO_TypeDef *) GPIOA_BASE代替GPIOA ,那么现在GPIOA就表示以 GPIOA_BASE为基地址的一个类型为 GPIO_TypeDef结构体的一个指针,所以你程序里可以用...
这是一个逻辑判断,判断外设起始地址是否是GPIOA的基地址。PERIPH通常是外设数据结构;&(PERIPH)就是取外设结构的首地址,(u32*)是强制转换外设结构首地址为U32类型;再*就是取外设结构的前32bit数据;==就是把这个32bit数据和GPIOA的基地址做比较。再...
GPIOC_BASE是GPIOC模块的起始地址.GPIO_TypeDef 是一结构体,如下.typedef struct{vu32 CRL;vu32 CRH;vu32 IDR;vu32 ODR;vu32 BSRR;vu32 BRR;vu32 LCKR;} GPIO_TypeDef; 扫码下载作业帮搜索答疑一搜即得 答案解析 查看更多优质解析 解答一 举报 typedef struct{vu32 CRL;vu32 CRH;vu32 IDR;vu32 ODR;vu...