用type定义的枚举类型和结构体

1.用typedef定义枚举类型

typedef enum{
    GPIO_Mode_AIN = 0x00,
    GPIO_Mode_IN_FLOATING = 0x04,
    GPIO_Mode_IPD = 0X28,
    GPIO_Mode_IPU = 0x48,
    GPIO_Mode_Out_OD = 0x14,
    GPIO_Mode_Out_PP = 0x10,
    GPIO_Mode_AF_OD = 0x1C,
    GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;

GPIOMode_TypeDef是新类型名,使用它定义变量时和int a;的方式类似,GPIOMode_TypeDef GPIO_Mode;给GPIO_Mode赋值时,只能取枚举当中定义的值。
此外,在C编译时,对枚举按常量来处理,若没有对枚举元素赋值,则C语言编译时会按照定义时的顺序依次对元素赋值为0,1,2……。当然,也可以想示例中那样,在定义时由程序员指定元素的值。

2.用typedef定义结构体

typedef struct{
    uint16_t GPIO_Pin;
    GPIOSpeed_TypeDef GPIO_Speed;
    GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;

GPIO_InitTypeDef是新类型名,定时变量的方式为:GPIO_InitTypeDef GPIO_InitStructure;。结构体应用时的格式是:变量名.成员名,例如GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

3.应用

// 定义GPIOMode_TypeDef枚举类型
typedef enum{
    GPIO_Mode_AIN = 0x00,
    GPIO_Mode_IN_FLOATING = 0x04,
    GPIO_Mode_IPD = 0X28,
    GPIO_Mode_IPU = 0x48,
    GPIO_Mode_Out_OD = 0x14,
    GPIO_Mode_Out_PP = 0x10,
    GPIO_Mode_AF_OD = 0x1C,
    GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;

// 定义GPIOSpeed_TypeDef枚举类型
typedef enum{
    GPIO_Speed_10MHZ = 1,
    GPIO_Speed_2MHZ,
    GPIO_Speed_50MHZ
}GPIOSpeed_TypeDef;

// 定义GPIO_InitTypeDef结构体类型
typedef struct{
    uint16_t GPIO_Pin;
    GPIOSpeed_TypeDef GPIO_Speed;
    GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;

#define GPIO_Pin_0  ((uint16_t)0x0001)  /*!< Pin 0 selected */
#define GPIO_Pin_1  ((uint16_t)0x0002)  /*!< Pin 1 selected */
#define GPIO_Pin_2  ((uint16_t)0x0004)  /*!< Pin 2 selected */
#define GPIO_Pin_3  ((uint16_t)0x0008)  /*!< Pin 3 selected */
#define GPIO_Pin_4  ((uint16_t)0x0010)  /*!< Pin 4 selected */
#define GPIO_Pin_5  ((uint16_t)0x0020)  /*!< Pin 5 selected */
#define GPIO_Pin_6  ((uint16_t)0x0040)  /*!< Pin 6 selected */
#define GPIO_Pin_7  ((uint16_t)0x0080)  /*!< Pin 7 selected */
#define GPIO_Pin_8  ((uint16_t)0x0100)  /*!< Pin 8 selected */
#define GPIO_Pin_9  ((uint16_t)0x0200)  /*!< Pin 9 selected */
#define GPIO_Pin_10 ((uint16_t)0x0400)  /*!< Pin 10 selected */
#define GPIO_Pin_11 ((uint16_t)0x0800)  /*!< Pin 11 selected */
#define GPIO_Pin_12 ((uint16_t)0x1000)  /*!< Pin 12 selected */
#define GPIO_Pin_13 ((uint16_t)0x2000)  /*!< Pin 13 selected */
#define GPIO_Pin_14 ((uint16_t)0x4000)  /*!< Pin 14 selected */
#define GPIO_Pin_15 ((uint16_t)0x8000)  /*!< Pin 15 selected */
#define GPIO_Pin_All((uint16_t)0xFFFF)  /*!< All pins selected */

int main(void){
        GPIO_InitTypeDef GPIOInitStructure;//定义变量
        GPIOInitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
        GPIOInitStructure.GPIO_Speed = GPIO_Speed_50MHZ;
        GPIOInitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
}

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