宏定义请教

2019-07-20 20:57发布

#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
不懂。请教了。谢谢!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
ianhom
1楼-- · 2019-07-20 23:54
就是把0x40020000这个地址及其之后的一段内容作为GPIO_TypeDef类型进行访问,这样就可以用GPIOA这个用使用GPIOA->xxx访问GPIOA的相关寄存器,赋值的操作不在这里,赋值的形式应该是GPIOA->XXX |= XXXXXXXX;
xuande
2楼-- · 2019-07-21 01:20
 精彩回答 2  元偷偷看……
BigLion
3楼-- · 2019-07-21 07:14
点个赞
xiachime
4楼-- · 2019-07-21 08:34
 精彩回答 2  元偷偷看……

一周热门 更多>