#define LED0 PBout(5)// PB5
#define LED1 PEout(5)// PE5
这是位带操作的定义宏,其实后面需要多次展开,因为PBout和PEout也都是宏,如
#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出
#define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //输出
而且里面的 BIT_ADDR、GPIOB_ODR_Addr、GPIOE_ODR_Addr也是宏
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
#define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C
#define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C
所以简短的一点展开后其实就分别获得了2个变量地址,这样才能设置LED0和LED1的值,其中LEDX中的X小于16。