#define PERIPH_BASE ((u32)0x40000000)//端口地址#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)//端口地址#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)//端口地址#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)//不明白,这个预定义//把GPIO

来源:学生作业帮助网 编辑:作业帮 时间:2024/07/12 19:51:08
#define PERIPH_BASE ((u32)0x40000000)//端口地址#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)//端口地址#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)//端口地址#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)//不明白,这个预定义//把GPIO
xT]OA+EZRۇ&PRMM$wC+EcӘZtb4UB3/zgeW[ڒ>v{=sE9hOH?}?$M#>ɟBr<08&XP$}6 .%qyfX69\j%Hi W>J]Y᡾WR;;pmi`hCհn$,&UZ&꺝i4J$a}rqn@uBD7wZH3 9<& {P,27%M㸒 hF!Y}A5zFa h .f|/X<ƶZ7'Ukm.%IQ;8j|(PS4))F

#define PERIPH_BASE ((u32)0x40000000)//端口地址#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)//端口地址#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)//端口地址#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)//不明白,这个预定义//把GPIO
#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 PERIPH_BASE ((u32)0x40000000)//端口地址#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)//端口地址#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)//端口地址#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)//不明白,这个预定义//把GPIO
#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这个变量