沁恒的GPIO分A和B口,不管是初始化還是讀寫都要調(diào)用A口和B口的對應(yīng)函數(shù),如果調(diào)整一個io從A口到B口,要把程序中所有的相關(guān)函數(shù)由A口改成B口,容易錯和漏,我自己寫了個庫,將IO封裝成結(jié)構(gòu)體,如下:
typedef?enum { ????PORT_A=0, ????PORT_B, }port_type; typedef?struct { ????port_type?port; ????uint32_t?pin; ????uint8_t?status; }IO_type; void?IO_mode(IO_type?_io,GPIOModeTypeDef?mode)?//其初始化 { ????if?(_io.port==PORT_A)?{ ????????GPIOA_ModeCfg(?_io.pin,?mode); ????}else{ ????????GPIOB_ModeCfg(?_io.pin,?mode); ????} } void?IO_digital_write(IO_type?_io,uint8_t?value)?//寫函數(shù) { ????if?(_io.port==PORT_A)?{ ????????if(value){ ????????????GPIOA_SetBits(_io.pin); ????????????_io.status=1; ????????}else{ ????????????GPIOA_ResetBits(_io.pin); ????????????_io.status=0; ????????} ????}else{ ????????if(value){ ????????????GPIOB_SetBits(_io.pin); ????????????_io.status=1; ????????}else{ ????????????GPIOB_ResetBits(_io.pin); ????????????_io.status=0; ????????} ????} } uint8_t?IO_digital_read(IO_type?_io)?//讀函數(shù) { ????if?(_io.port==PORT_A)?{ ????????_io.status=GPIOA_ReadPortPin(_io.pin)?1:0; ????}else{ ????????_io.status=GPIOB_ReadPortPin(_io.pin)?1:0; ????} ????return?_io.status; }
這樣定義后不管初始化還是讀寫端口都是A/B口沒關(guān)系了,只需要在定義的時候更改一次就可以了
定義IO的時候如下:
IO_type?IO_VAVLE_STEAM=??{PORT_B,GPIO_Pin_8,FALSE}; IO_type?IO_VAVLE_BREW=??{PORT_B,GPIO_Pin_17,FALSE}; IO_type?IO_BUMP=?????{PORT_B,GPIO_Pin_6,FALSE}; IO_type?IO_IMPULSE=????{PORT_B,GPIO_Pin_15,FALSE}; IO_type?IO_BREW_SWITCH=??{PORT_B,GPIO_Pin_14,FALSE}; IO_type?IO_LOW=??????{PORT_B,GPIO_Pin_13,FALSE}; IO_type?IO_HIGH=?????{PORT_B,GPIO_Pin_12,FALSE}; IO_type?IO_SSR=?????{PORT_B,GPIO_Pin_9,FALSE};
初始化為這樣的:
void?GPIO_int() { ????IO_mode(IO_VAVLE_STEAM,GPIO_ModeOut_PP_20mA); ????IO_mode(IO_VAVLE_BREW,GPIO_ModeOut_PP_20mA); ????IO_mode(IO_IMPULSE,GPIO_ModeOut_PP_20mA); ????IO_mode(IO_BREW_SWITCH,GPIO_ModeIN_Floating); ????IO_mode(IO_LOW,GPIO_ModeIN_Floating); ????IO_mode(IO_HIGH,GPIO_ModeIN_Floating); }
寫函數(shù)
????IO_digital_write(IO_VAVLE_STEAM,?0); ????IO_digital_write(IO_VAVLE_BREW,?0); ????IO_digital_write(IO_IMPULSE,?0);
讀函數(shù)
????uint8_t?low=IO_digital_read(IO_LOW); ????uint8_t?high=IO_digital_read(IO_HIGH);
熱門產(chǎn)品 :
CH397: 高集成度、低功耗USB網(wǎng)卡芯片