初级会员

- 积分
- 102
- 金钱
- 102
- 注册时间
- 2016-5-16
- 在线时间
- 13 小时
|
1金钱
#define GPIOA ((GPIO_TypeDef *)GPIOA_BASE)
这个宏定义是怎么强制转换成GPIOA的地址的?总觉得少了一个赋值动作?特请教各位。谢谢!
我将其一步一步展开后如下:
第一步是用GPIOA用
GPIO_TypeDef *GPIOA_BASE,这只是声名了一个结构体指针。
#define GPIOA_BASE (AHB1PERIPH_BASE +0X0000)
展开后如下:
GPIO_TypeDef *(AHB1PERIPH_BASE +0X0000)
#define AHB1PERIPH_BASE (PERIPH_BASE +0X00020000)
再展开宏得:
GPIO_TypeDef *(PERIPH_BASE+0X00020000+0X0000)
#define PERIPH_BASE (uint32_t)0x400000000)
最后展开宏得到的最终形式是:
GPIO_TypeDef *0x40020000
不懂。请教了。谢谢!
|
最佳答案
查看完整内容[请看2#楼]
就是把0x40020000这个地址及其之后的一段内容作为GPIO_TypeDef类型进行访问,这样就可以用GPIOA这个用使用GPIOA->xxx访问GPIOA的相关寄存器,赋值的操作不在这里,赋值的形式应该是GPIOA->XXX |= XXXXXXXX;
|