用type定義的列舉型別和結構體
阿新 • • 發佈:2019-02-17
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;
}