概述
本章主要講解GPIO輸入檢測(cè)。
硬件準(zhǔn)備
這里準(zhǔn)備了2塊開(kāi)發(fā)板進(jìn)行驗(yàn)證,分別是GD32303C_START開(kāi)發(fā)板。
樣品申請(qǐng)
https://www.wjx.top/vm/wFGhGPF.aspx#
管腳配置
在GD32303C_START開(kāi)發(fā)板中,按鍵的管腳為PA0。
LED管腳如下所示。
對(duì)GPIO管腳進(jìn)行初始化配置。
/* 使能GPIOB時(shí)鐘*/
rcu_periph_clock_enable(RCU_GPIOB);
/*設(shè)置PB14、PB15為推挽輸出 */
gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_14);
gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);
/* 設(shè)置PB14、PB15為輸出為0*/
gpio_bit_reset(GPIOB, GPIO_PIN_14);
gpio_bit_reset(GPIOB, GPIO_PIN_15);
/* 使能GPIOB時(shí)鐘*/
rcu_periph_clock_enable(RCU_GPIOA);
/*設(shè)置PA0為浮空輸入 */
gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
gpio_input_bit_get()函數(shù)
讀取指定的GPIO管腳電平狀態(tài)。
例如按下按鍵LED1滅LE2亮,松開(kāi)按鍵LED1亮LE2滅。
while(1){
if(SET == gpio_input_bit_get(GPIOA, GPIO_PIN_0))//按下LED1滅LE2亮
{
gpio_bit_write(GPIOB, GPIO_PIN_15,SET);
gpio_bit_write(GPIOB, GPIO_PIN_14,RESET);
}
else//松開(kāi)LED1亮LE2滅
{
gpio_bit_write(GPIOB, GPIO_PIN_15,RESET);
gpio_bit_write(GPIOB, GPIO_PIN_14,SET);
}
delay_1ms(10);
}
gpio_input_port_get()函數(shù)
讀取整個(gè)GPIO的電平狀態(tài)。 例如按下按鍵LED1滅LED2亮,松開(kāi)按鍵LED1亮LE2滅。
while(1){
uint16_t get_gpioa_num = 0;
get_gpioa_num=gpio_input_port_get(GPIOA);
if(get_gpioa_num & 0x0001)//按下LED1滅LE2亮
{
gpio_bit_write(GPIOB, GPIO_PIN_15,SET);
gpio_bit_write(GPIOB, GPIO_PIN_14,RESET);
}
else//松開(kāi)LED1亮LE2滅
{
gpio_bit_write(GPIOB, GPIO_PIN_15,RESET);
gpio_bit_write(GPIOB, GPIO_PIN_14,SET);
}
delay_1ms(10);
}
gpio_output_bit_get()函數(shù)
讀取輸出管腳電平狀態(tài)。
例如按下按鍵LED2亮,如果LED1是亮的,那么切換為滅的狀態(tài),如果為滅切換為亮狀態(tài)。 設(shè)置斷點(diǎn)查看會(huì)更加準(zhǔn)確。
while(1){
uint16_t get_gpioa_num = 0;
get_gpioa_num=gpio_input_port_get(GPIOA);
if(get_gpioa_num & 0x0001)//按下LED1滅LE2亮
{
gpio_bit_write(GPIOB, GPIO_PIN_15,SET);
if(gpio_output_bit_get(GPIOB, GPIO_PIN_14)==SET)//如果燈亮,則燈滅
gpio_bit_write(GPIOB, GPIO_PIN_14,RESET);
else//如果燈滅,則燈亮
gpio_bit_write(GPIOB, GPIO_PIN_14,SET);
}
else//松開(kāi)LED1亮LE2滅
{
gpio_bit_write(GPIOB, GPIO_PIN_15,RESET);
}
delay_1ms(10);
}
}
gpio_output_port_get()函數(shù)
讀取全部GPIO管腳輸出電平狀態(tài)。
審核編輯 黃昊宇
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4284瀏覽量
62325 -
GPIO
+關(guān)注
關(guān)注
16文章
1189瀏覽量
51839 -
固件庫(kù)
+關(guān)注
關(guān)注
2文章
97瀏覽量
14918
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論