结构体是C语言中一种非常重要的数据类型,该数据类型由一组称为成员(或称为域,或称为元素)的不同数据组成,其中每个成员可以具有不同的类型,例如整数、浮点数等。其描述了某一块内存区间的大小及解释意义。结构体通常用来表示类型不同但是又相关的数据,结构体成员在内存中是依次排列的,但是定义之后是只有名称没有地址的。
//名称有了但是地址不能确定
typedef struct{
uint32_t CRL;
uint32_t CRH;
uint32_t IDR;
uint32_t ODR;
uint32_t BSRR;
uint32_t BRR;
uint32_t LCKR;
}GPIO_TypeDef
//GPIOx_CRL、GPIOx_CRH有地址,没名字
//通过下面的方式进行联系
(GPIO_TypeDef*)GPIOC_BASE
//引用成员
((GPIO_TypeDef*)GPIOC_BASE) -> ODR
//但是很明显,太长了不太好用因此使用宏定义
GPIOC -> ODR
main.h文件
/* AHB总线基地址 */
/*GPIOC外设基地址*/
/*RCC外设基地址*/
typedef unsigned int uint32_t;
typedef struct
{
uint32_t CRL;
uint32_t CRH;
uint32_t IDR;
uint32_t ODR;
uint32_t BSRR;
uint32_t BRR;
uint32_t LCKR;
}GPIO_TypeDef;
//根据自己的需要进行定义
typedef struct
{
uint32_t CR;
uint32_t CFGR;
uint32_t CIR;
uint32_t APB2RSTR;
uint32_t APB1RSTR;
uint32_t AHBENR;
uint32_t APB2ENR;
uint32_t APB1ENR;
uint32_t BDCR;
uint32_t CSR;
}RCC_TypeDef;
main.c文件
int main(void){
RCC->APB2ENR |= 1<<4;
GPIOC->CRH &=~(0x0F<<(4*5));
GPIOC->CRH |=(1<<(4*5));
GPIOC->ODR &=~(1<<13);
while(1);
}
void SystemInit(){
}