一种取多引脚的函数用法

#ifdef _GPIOE
EXT GPIO_TypeDef *GPIOE;
#endif /*_GPIOE */
#define GPIO_Pin_12                ((u16)0x1000)    /* Pin 12 selected */

struct PortDef
{
    GPIO_TypeDef *port;//从定义的port中看出 GPIO_TypeDef 如上面定义所示
    u16 pin;//从定义的PIN中看出   如上面定义所示
};
static const struct PortDef relay_chns[RELAY_CHN_NR] = 
{
    {RELAY1_CHK_PORT, RELAY1_CHK_PIN},
    {RELAY2_CHK_PORT, RELAY2_CHK_PIN},
    {RELAY3_CHK_PORT, RELAY3_CHK_PIN},
    {RELAY4_CHK_PORT, RELAY4_CHK_PIN},
};



#ifdef RELAY_CHK
#define RELAY1_CHK_PORT  GPIOE
#define RELAY1_CHK_PIN  GPIO_Pin_12
#define RELAY2_CHK_PORT  GPIOE
#define RELAY2_CHK_PIN  GPIO_Pin_13
#define RELAY3_CHK_PORT  GPIOE
#define RELAY3_CHK_PIN  GPIO_Pin_14
#define RELAY4_CHK_PORT  GPIOE
#define RELAY4_CHK_PIN  GPIO_Pin_15

#define is_relay_on(PORT,PIN) GPIO_ReadInputDataBit(PORT,PIN)
#endif
is_relay_on(relay_chns[i].port, relay_chns[i].pin)


#ifdef RELAY_CHK
    /* relay check pin */
    GPIO_InitStructure.GPIO_Pin = RELAY1_CHK_PIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
    GPIO_Init(RELAY1_CHK_PORT, &GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Pin = RELAY2_CHK_PIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
    GPIO_Init(RELAY2_CHK_PORT, &GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Pin = RELAY3_CHK_PIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
    GPIO_Init(RELAY3_CHK_PORT, &GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Pin = RELAY4_CHK_PIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
    GPIO_Init(RELAY4_CHK_PORT, &GPIO_InitStructure);

#endif


你可能感兴趣的:(C语言)