typedef struct {
uint16_t bit0 : 1;
uint16_t bit1 : 1;
uint16_t bit2 : 1;
uint16_t bit3 : 1;
uint16_t bit4 : 1;
uint16_t bit5 : 1;
uint16_t bit6 : 1;
uint16_t bit7 : 1;
uint16_t bit8 : 1;
uint16_t bit9 : 1;
uint16_t bit10 : 1;
uint16_t bit11 : 1;
uint16_t bit12 : 1;
uint16_t bit13 : 1;
uint16_t bit14 : 1;
uint16_t bit15 : 1;
} Bits_16_TypeDef;
#define PAout(n) ((Bits_16_TypeDef *)(&(GPIOA->ODR)))->bit##n
#define PBout(n) ((Bits_16_TypeDef *)(&(GPIOB->ODR)))->bit##n
#define PAin(n) ((Bits_16_TypeDef *)(&(GPIOA->IDR)))->bit##n
#define PBin(n) ((Bits_16_TypeDef *)(&(GPIOB->IDR)))->bit##n
uint16_t bit0 : 1;
uint16_t bit1 : 1;
uint16_t bit2 : 1;
uint16_t bit3 : 1;
uint16_t bit4 : 1;
uint16_t bit5 : 1;
uint16_t bit6 : 1;
uint16_t bit7 : 1;
uint16_t bit8 : 1;
uint16_t bit9 : 1;
uint16_t bit10 : 1;
uint16_t bit11 : 1;
uint16_t bit12 : 1;
uint16_t bit13 : 1;
uint16_t bit14 : 1;
uint16_t bit15 : 1;
} Bits_16_TypeDef;
#define PAout(n) ((Bits_16_TypeDef *)(&(GPIOA->ODR)))->bit##n
#define PBout(n) ((Bits_16_TypeDef *)(&(GPIOB->ODR)))->bit##n
#define PAin(n) ((Bits_16_TypeDef *)(&(GPIOA->IDR)))->bit##n
#define PBin(n) ((Bits_16_TypeDef *)(&(GPIOB->IDR)))->bit##n
本文介绍了一种通过定义类型和宏来简化STM32 GPIO寄存器操作的方法,利用BitFields结构体和宏定义实现了对16位GPIO输出寄存器(ODR)及输入数据寄存器(IDR)的位级操作,提高了代码的可读性和易用性。
1211





