//把下面的代码放在.h的头文件里,就可以像正点原子一样进行端口的位操作了(这是我用在HK32F030M芯片上的)
//--------------------------------------------------------------------------------------------
#ifdef __cplusplus
extern "C" {
#endif
typedef struct
{
u16 bit0 : 1;
u16 bit1 : 1;
u16 bit2 : 1;
u16 bit3 : 1;
u16 bit4 : 1;
u16 bit5 : 1;
u16 bit6 : 1;
u16 bit7 : 1;
u16 bit8 : 1;
u16 bit9 : 1;
u16 bit10 : 1;
u16 bit11 : 1;
u16 bit12 : 1;
u16 bit13 : 1;
u16 bit14 : 1;
u16 bit15 : 1;
}Bits16_TypeDef;
//IO口操作,只对单一的IO口!
//确保n的值小于16!
#define PAout(n) ( ((Bits16_TypeDef *)(&(GPIOA->ODR)))->bit##n )
#define PAin(n) ( ( GPIOA->IDR&(1 << (n)) )>>n ) //输入
#define PBout(n) ( ((Bits16_TypeDef *)(&(GPIOB->ODR)))->bit##n )
#define PBin(n) ( ( GPIOB->IDR&(1 << (n)) )>>n ) //输入
#define PCout(n) ( ((Bits16_TypeDef *)(&(GPIOC->ODR)))->bit##n )
#define PCin(n) ( ( GPIOC->IDR&(1 << (n)) )>>n ) //输入
#define PDout(n) ( ((Bits16_TypeDef *)(&(GPIOD->ODR)))->bit##n )
#define PDin(n) ( ( GPIOD->IDR&(1 << (n)) )>>n ) //输入
#ifdef __cplusplus
}
#endif
|