STM32之GPIO輸入輸出
GPIO的輸出
背景:應(yīng)用在點(diǎn)亮LED。LED串聯(lián)電阻再上拉,另一端與GPIO口相連。因此,GPIO輸出高電平則LED滅,輸出低電平則LED亮。
第一步工作是初始化GPIO,使能外設(shè)時(shí)鐘,因?yàn)镚PIO是掛載在APB2中線上的。然后對(duì)GPIO_InitTypeDef結(jié)構(gòu)體進(jìn)行初始化,設(shè)置GPIO_Pin的具體引腳,輸出頻率,工作模式,如上拉,下拉,浮空等。
關(guān)于GPIO的庫(kù)函數(shù)里有GPIO_SetBit( )和GPIO_ResetBits ( )兩個(gè)函數(shù),分別是設(shè)置指定的數(shù)據(jù)端口位和清除指定的數(shù)據(jù)端口位,就像置1和清零。
函數(shù)名 : GPIO_SetBits
函數(shù)原形: void GPIO_SetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
功能描述: 設(shè)置指定的數(shù)據(jù)端口位
輸入?yún)?shù)1: GPIOx :x 可以是A,B ,C ,D 或者E,來(lái)選擇GPIO外設(shè)
輸入?yún)?shù)2: GPIO_Pin:待設(shè)置的端口位 。該參數(shù)可以取GPIO_Pin_x(x 可以是 0-15)的任意組合 ,如GPIO_Pin_10 | GPIO_Pin_15
函數(shù)GPIO_ResetBits 的原型為void GPIO_ResetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin),其參數(shù)的含義和上面也是類似的。
因此,點(diǎn)亮一個(gè)LDE燈變成調(diào)用函數(shù)
GPIO_ResetBits(GPIOx,GPIO_Pin_x); 輸出低電平點(diǎn)亮
熄滅一個(gè)LED燈變成
GPIO_SeBits(GPIOx,GPIO_Pin_x); 輸出高電平熄滅
GPIO輸入
當(dāng)GPIO連接了外部傳感器,而傳感器的信號(hào)是開(kāi)關(guān)量的時(shí)候,GPIO可能需要去輪詢輸入的狀態(tài)是高是低,這時(shí)候GPIO就需要當(dāng)做輸入來(lái)用。
按鍵的動(dòng)作可以用來(lái)模擬傳感器的動(dòng)作,按鍵通過(guò)上拉電阻接到高電平。當(dāng)按鍵按下時(shí),會(huì)使相應(yīng)的GPIO管腳變成低電平。配置這些GPIO引腳為上拉模式,在沒(méi)有收到信號(hào)的情況下,保持這些GPIO口為高電平。
GPIO的庫(kù)函數(shù)也為我們提供了讀取某指定端口管腳的輸入--GPIO_ReadInputDataBit 正是這樣一個(gè)函數(shù)
函數(shù)名 GPIO_ReadInputDataBit
函數(shù)原形 u8 GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
功能描述 讀取指定端口管腳的輸入
輸入?yún)?shù)1 GPIOx :x 可以是A,B ,C ,D 或者E,來(lái)選擇GPIO外設(shè)
輸入?yún)?shù)2 GPIO_Pin:待讀取的端口位
返回值 輸入端口管腳值,高或者低
u8 ReadValue;
ReadValue = GPIO_ReadInputDataBit(GPIOx, GPIO_Pin_x);
返回值ReadValue反應(yīng)了GPIO口的高低狀態(tài)。