访问寄存器是CPU执行程序的基础,每种CPU架构都有其特定的寄存器集合和访问方式。
方式一:对地址进行宏定义
#define GPIOA_BASE ((unsigned int)0x48000000)
#define GPIOA_ODR (GPIO_BASE + 0X14)
//读操作
val1 = *(unsigned int*)GPIOA_ODR
//写操作
*(unsigned int*)GPIOA_ODR = val2
方式二:用结构体封装寄存器
typedef struct{
uint32_t MODER;
uint32_t OTYPER;
uint32_t OSPEEDR;
uint32_t IDR;
uint32_t ODR;
uint32_t BSRR;
uint32_t LCKR;
}GPIO_TypeDef;
//定义首地址
#define GPIOA_BASE ((unsigned int)0X48000000)
#define GPIOA ((GPIO_TypeDef *)GPIOA_BASE)
//访问方式
//这行代码是在操作GPIO端口的输出数据寄存器,而不是设置内存地址。
//0x14是作为数据被写入到寄存器中,以控制GPIO引脚的输出状态。
GPIOA->ODR = 0x14;