作业帮 > 综合 > 作业

#define PERIPH_BASE ((u32)0x40000000)//端口地址

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/05 19:38:49
#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代表一个指针变量吗
int main()
{
typedef unsigned long u32;
typedef volatile unsigned long vu32;// volatile是什么意思
typedef struct
{
vu32 CRL;
vu32 CRH;
vu32 IDR;
vu32 ODR;
vu32 BSRR;
vu32 BRR;
vu32 LCKR;
} GPIO_TypeDef;
GPIOA->ODR = 0x1111;// GPIOA能直接指向GPIO_TypeDef结构体的成员ODR吗
}
请讲的具体一些
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
GPIOA的一个宏而已.
给后面的GPIOA->ODR = 0x1111;用的,其实就是一种指针的使用
/////////////////////////////////////////////////
这两句话.改成好理解的就是
GPIO_TypeDef * GPIOA;
GPIOA = (GPIO_TypeDef *) GPIOA_BASE; GPIOA_BASE表示指针指向的地方
类似 GPIOA = (GPIO_TypeDef *)1000;,
既然gpioa是指针当然可以 GPIOA->ODR了
//////////////////////////////////
typedef volatile unsigned long vu32;// volatile是什么意思
搞嵌入式的都知道 volatile 表示可变的.
也就是说这个变量可能在中断中访问,仿真编译器优化读写vu32这个变量