在使用cpu资源的时候,须要设置寄存器才能使用相应的资源,而在STM32里使用寄存器会相似于下面这种spa
GPIOA -> ODR |=1<<3;
这样就访问并设置了端口A的 ODR 寄存器,但是有不少人不明白怎么就访问了地址了,怎么就经过一个结构体的赋值语句就能设置ODR这个寄存器呢指针
下面咱们就来本身编写一个结构体来操做寄存器code
既然是结构体语句,确定会有结构体的存在,而结构体里面的内容就是一个功能组的里面的寄存器名字,如:blog
这个CCM寄存器功能组里面就包含了CCM_CCR,CCM_CCDR等等,由于在一个寄存器功能组里的地址是相连或者相近的,这里面咱们就能够做为一个结构体,定义以下:资源
typedef struct { volatile unsigned int CCR; volatile unsigned int CCDR; volatile unsigned int CSR; …… volatile unsigned int CCGR6; volatile unsigned int RESERVED_3[1]; volatile unsigned int CMEOR; }CCM_Type;
能够看见结构体里的排列顺序与寄存器的排列顺序是同样的,但会发如今结构体中出现了一个 RESERVED_3[1];这个是在官方寄存器中是没有的,这是为何呢,咱们来看看官方寄存器表class
能够看见CCM_CCGR6 地址为20C4080,CCM_CMEOR地址为20C4088,中间为相隔了8个字节地址,咱们能够参考上面的寄存器地址,中间相隔为4个字节,说明这两个地址之间空了一个寄存器,咱们就须要把这个寄存器地址给他用其余值来进行代替,由于咱们结构体的地址是连续的,若是不占用这个地址,后面的值得地址就会偏移。im
如今结构体有了,尚未指定地址,咱们须要给定结构体基地址,而这个基地址就是咱们这个寄存器组的第一个寄存器的地址cpu
#define CCM_address 0x20c400 //定义基地址
给结构体基地址img
#define CCM ((CCM_Type*)CCM_address) //外设指针
这样咱们就能够像STM32那样使用结构体来使用寄存了端口
CCM -> CCR |= 1<<3;