/*LED0灯GPIO口以及引脚,时钟的宏定义,用于LED灯的初始化*/
#define LED0_PIN GPIO_Pin_0
#define LED0_PORT GPIOB
#define LED0_CLK RCC_AHB1Periph_GPIOB
/*LED1灯GPIO口以及引脚,时钟的宏定义,用于LED灯的初始化*/
#define LED1_PIN GPIO_Pin_1
#define LED1_PORT GPIOB
#define LED1_CLK RCC_AHB1Periph_GPIOB
/*对GPIO输入输出寄存器的地址映射,GPIOB_BASE是库函数中定义过的,可在库手册中查询对应寄存器的地址*/
#define GPIOB_ODR_ADDR (GPIOB_BASE+20) //输出寄存器映射
#define GPIOB_IDR_ADDR (GPIOB_BASE+16) //输入寄存器映射
/* BITBAND(addr,bitnum)是公式,用于计算位带别名区域的地址,这里不再详述*/
#define BITBAND(addr,bitnum) ((addr & 0xF0000000)+0x02000000+((addr & 0x000FFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *) (addr)) //强转为指针类型,再取值
#define BIT_ADDR(addr,bitnum) MEM_ADDR(BITBAND(addr,bitnum)) //取对应寄存器中的值
/*通过BIT_ADDR(addr,bitnum)取对应寄存器中的值,然后进行操作*/
#define PAOUT(n) BIT_ADDR(GPIOB_ODR_ADDR,n) //输出
#define PAIN(n) BIT_ADDR(GPIOB_IDR_ADDR,n) //输入
/*LED灯这里只用到了输出,让对应引脚输出1或者0即可。也就是LED0=1这样就可以和51单片机一样,直接操作寄存器*/
#define LED0 PAOUT(0)
#define LED1 PAOUT(1)