新手求教,关于寄存器设置的问题,求解答。

2019-07-21 04:40发布

原子哥的开发板刚买回来不久,烧了几个程序,都OK。我初步接触32单片机,学起来还是感觉有点费劲,在学习的同时又在不断的补习C语言知识。那么从最基本的跑马灯实验说起吧!
GPIOA->CRH&=0XFFFFFFF0; 
GPIOA->CRH|=0X00000003;//设置PA8为推挽输出
然后GPIOA是一个宏,#define GPIOA      ((GPIO_TypeDef *) GPIOA_BASE)
GPIO_TypeDef是一个typedef,
typedef struct
{
  __IO uint32_t CRL;
  __IO uint32_t CRH;
  __IO uint32_t IDR;
  __IO uint32_t ODR;
  __IO uint32_t BSRR;
  __IO uint32_t BRR;
  __IO uint32_t LCKR;
} GPIO_TypeDef;
那么#define GPIOA      ((GPIO_TypeDef *) GPIOA_BASE)  这一句相当于定义了一个指针型结构体变量GPIOA_BASE,GPIOA->CRH是结构体指针变量访问结构体成员CRH。
看到这里我就糊涂了,GPIOA_BASE经过一次次的宏之后实际它是一个地址值,那么一个常数又怎么能定义为指针型结构体变量呢?还有,
GPIOA的CRH究竟是如何赋值的呢?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。