寄存器的本质就是内存,RAM,而指针是可以对内存进行操作的,因此可以通过指针来读写寄存器。
如何读取以下一片地址:
步骤1、首地址
结构体,它所占用的内存空间大小与它内部成员有关。
构造一个28字节的类型
typedef struct{ //每个模块都有几个寄存器,而这几个寄存器都是按照顺序连续排放在内存中,只要找到首地址,也就是读数据的第一个地址,需要告知(地址+数据类型)
unsigned int CRL; //1-4
unsigned int CRH; //5-8
unsigned int a3; //9-12
unsigned int a4; //13-16
unsigned int a5;
unsigned int a6;
unsigned int a7;
}GPIO_A;
//现在我们访问一个变量,这个变量是一个结构体,一共占用了28个字节,那么这个指针也必须是这个结构体类型的,这称为强制类型转换
#define MyGPIOA ((GPIO_A*)0x40010800) //首先告诉CPU这是一个地址,这个地址读什么类型的数据呢,读结构体类型的数据,那么这个结构体类型的数据占用28字节空间,我们给这个指针取了一个名字,MyGPIOA
int main(void){
int a = 2; //int 类型数据,需要通过int类型的指针读取该数据
int *p;
p = &a;
MyGPIOA->CRH = 2; //通过这种方式对寄存器进行操作
while(1)
{
}
}