#define GPIO_Pin_0 ((uint16_t) 0x0001)
#define GPIO_Pin_1 ((uint16_t) 0x0002)
#define GPIO_Pin_2 ((uint16_t) 0x0004)
#define GPIO_Pin_3 ((uint16_t) 0x0008)
......................
#define GPIO_Pin_15 ((uint16_t) 0x8000)
#define GPIO_Pin_All ((uint16_t) 0xFFFF) //每个端口比如GPIOA GPIOB,有16个GPIO引脚,我们用16bit表示,每1bit表示其中一个引脚
#define RCC_APB2Periph_AFIO ((uint32_t) 0x00000001) //设置端口偏移量
#define RCC_APB2Periph_GPIOA ((uint32_t) 0x00000004)
#define RCC_APB2Periph_GPIOB ((uint32_t) 0x00000008)
typedef struct
{
vu32 CRL; //对应端口配置低寄存器
vu32 CRH; //端口配置高寄存器
vu32 IDR; //端口输入数据寄存器
vu32 ODR; //端口输出数据寄存器
vu32 BSRR; //端口位设置/清除寄存器
vu32 BRR; //端口位清除寄存器
vu32 LCKR;//端口配置锁定寄存器
}GPIO_TypeDef;
typedef struct
{
vu32 CR; //对应时钟控制寄存器
vu32 CFGR;//时钟配置寄存器
vu32 CIR; //时钟中断寄存器
vu32 APB2RSTR;//APB2外设复位寄存器
vu32 APB1RSTR;
vu32 AHBENR; //AHB外设时钟使能
vu32 APB2ENR;//APB2外设时钟使能寄存器
vu32 APB1ENR;
vu32 BDCR;//备份域控制寄存器
vu32 CSR; //控制/状态寄存器
}RCC_TypeDef;
/*********************GPIOB引脚的内存对应地址******************
#define PERIPH_BASE ((uint32_t)0x40000000) //定义总线基地址
#define APB2PERIPH_BASE (PERIPH_BASE+0x10000) //APB2时钟总线地址是在总线基地址上多加0x10000,刚好为AFIO寄存器地址0x40010000~0x400103FF,具体参考手册
#define GPIOB_BASE (APB2PERIPH_BASE+0x0C00)//定义GPIO端口B的基地址,GPIO端口B地址 0x40010C00~0x40010FFF
#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)//定义一个GPIO_TypeDef的struct从GPIO端B的基地址开始覆盖
/*****************RCC时钟<*******************************
#define AHBPERIPH_BASE (PERIPH_BASE+0x20000)
#define RCC_BASE (AHBPERIPH_BASE+0x1000)
#define RCC ((RCC_TypeDef *) RCC_BASE)