分享一個自己寫的GPIO操作庫

沁恒的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);


感謝。怎么熱心分享的人都沒人留言支持一下。勿以善小而不為


代碼雖然簡單,但是很實用。


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频