一引言
通用輸入/輸出(GPIO)是一種常見的硬件接口,在單片機(jī)中起著至關(guān)重要的作用。它們?cè)试S單片機(jī)與外設(shè)進(jìn)行數(shù)字/模擬信號(hào)的交互,用于連接各種外設(shè)、傳感器、執(zhí)行器以及其他數(shù)字/模擬電路。
(資料圖片)
本文將簡要介紹單片機(jī)GPIO的結(jié)構(gòu)及配置方法,以幫助大家更好地理解和使用這一重要的功能和接口。
二GPIO基本結(jié)構(gòu)
一個(gè)標(biāo)準(zhǔn)GPIO端口一般由輸入數(shù)據(jù)寄存器、輸出數(shù)據(jù)寄存器、上/下拉電阻、上/下MOS管、復(fù)用功能輸入/輸出、模擬輸入/輸出以及保護(hù)二極管等幾部分組成。
圖:GPIO基本結(jié)構(gòu)
圖:單片機(jī)標(biāo)準(zhǔn)I/O端口位的基本結(jié)構(gòu)
1、保護(hù)二極管
引腳上最外側(cè)的兩個(gè)保護(hù)二極管可以將引腳外部過高或過低的電壓進(jìn)行鉗位,如下圖所示:
當(dāng)引腳電壓高于VDD_FT 或VDD 時(shí),上方的二極管導(dǎo)通吸收高電壓;
當(dāng)引腳電壓低于VSS 時(shí),下方的二極管導(dǎo)通,防止不正常電壓引入芯片導(dǎo)致芯片燒毀。
I/O pin是受保護(hù)的節(jié)點(diǎn)。當(dāng)該點(diǎn)電壓超過VDD+VD1(典型如0.7V)時(shí),上面的二極管導(dǎo)通。而當(dāng)該點(diǎn)電壓小于-VD2(典型如-0.7V)時(shí),下面的二極管導(dǎo)通。
因此,該點(diǎn)電壓會(huì)被鉗制在VDD+VD1到-VD2之間。
圖:GPIO內(nèi)部保護(hù)二極管
2、上下拉電阻
上下拉電阻的作用是為了提供一個(gè)默認(rèn)的穩(wěn)定電平,使引腳在未連接外部設(shè)備時(shí)能夠保持確定的電平狀態(tài)。
(1)上拉電阻:當(dāng)一個(gè)GPIO引腳被配置為上拉時(shí),上拉電阻被連接到高電平,確保在引腳未連接到任何外部設(shè)備時(shí),引腳的電壓為高電平。
(2)下拉電阻:與上拉電阻相反,下拉電阻在一個(gè)GPIO引腳被配置為下拉時(shí),確保引腳在未連接外部設(shè)備時(shí)保持低電平狀態(tài)。
GD32F4系列單片機(jī)的上下拉電阻設(shè)計(jì)與GD32F3系列設(shè)計(jì)有所變更,如下圖所示:
圖:GD32F3系列單片機(jī)GPIO內(nèi)部上/下拉電阻位置
圖:GD32F4系列單片機(jī)GPIO內(nèi)部上/下拉電阻位置
兩者的主要區(qū)別是GD32F4系列單片機(jī)將上/下拉電阻移至IO口最外側(cè),無論輸出還是輸入模式,都可以被配置。而GD32F3系列單片機(jī)的上/下拉電阻在輸入驅(qū)動(dòng)部分。
(1)改動(dòng)好處:GPIO引腳的狀態(tài)更加穩(wěn)定;
(2)改動(dòng)缺點(diǎn):若單片機(jī)配置為了輸出模式,GPIO配置時(shí)還打開了上/下拉電阻,那么芯片在配置為高/低電平時(shí)內(nèi)部會(huì)一直通過下/上拉電阻產(chǎn)生漏電流。
圖:輸出模式與上/下拉電阻配置沖突時(shí)的漏電路徑
對(duì)于功耗比較敏感的應(yīng)用場景:被配置為輸出模式的引腳,不應(yīng)打開其上/下拉電阻,應(yīng)將之配置為浮空;
對(duì)于穩(wěn)定性要求高于功耗的應(yīng)用場景:被配置為輸出模式的引腳,可根據(jù)外部連接情況進(jìn)行上/下拉電阻的配置。
3、上/下MOS管
MOS管在GPIO引腳內(nèi)部起著開關(guān)、電平轉(zhuǎn)換和保護(hù)等多種功能。它們通過控制電流的通斷來實(shí)現(xiàn)不同的功能,提供了靈活和可靠的控制能力,使GPIO引腳能夠與外部設(shè)備進(jìn)行有效的交互和通信。
當(dāng)GPIO被配置為輸出模式時(shí),線路經(jīng)過輸出控制緩沖器到一個(gè)由P-MOS和N-MOS組成的雙MOS電路。
而GPIO引腳則可配置為推挽和開漏兩種輸出模式;
圖:GPIO內(nèi)部上/下MOS管
(1)推挽輸出:
GPIO輸出高電平時(shí),PMOS導(dǎo)通、NMOS截止;
GPIO輸出低電平時(shí),NMOS導(dǎo)通、PMOS截止;
GPIO高低電平切換,兩個(gè)MOS輪流導(dǎo)通,提高灌電流和拉電流能力;
(2)開漏輸出:
無論GPIO輸出高/低電平,PMOS始終保持關(guān)閉;
NMOS導(dǎo)通時(shí),GPIO輸出為低電平;
NMOS截止時(shí),GPIO引腳狀態(tài)為高阻態(tài),引腳電平依靠外部上拉電阻拉高
開漏輸出模式的典型應(yīng)用場景為I2C總線;
4、輸入數(shù)據(jù)寄存器
GPIO口的輸入信號(hào)經(jīng)過上下拉電阻、TTL施密特觸發(fā)器引入。當(dāng)信號(hào)經(jīng)過TTL施密特觸發(fā)器后,輸入信號(hào)將變?yōu)?u>數(shù)字信號(hào)0 或1,然后存儲(chǔ)在輸入數(shù)據(jù)寄存器中,處理器通過讀取“輸入數(shù)據(jù)寄存器”就可以獲取IO口電平狀態(tài);
即對(duì)端口輸入數(shù)據(jù)寄存器進(jìn)行讀操作,將獲取當(dāng)前I/O口的狀態(tài);
圖:GPIO內(nèi)部輸入數(shù)據(jù)寄存器
5、輸出數(shù)據(jù)寄存器
輸出數(shù)據(jù)寄存器是雙MOS管結(jié)構(gòu)電路的輸入控制信號(hào),由GPIO“輸出數(shù)據(jù)寄存器GPIOx_OCTRL”提供;
對(duì)端口輸出數(shù)據(jù)寄存器進(jìn)行讀操作,將返回上次寫入的值。
圖:GPIO內(nèi)部輸出數(shù)據(jù)寄存器
6、復(fù)用功能
GPIO的復(fù)用功能使得一個(gè)GPIO引腳可以根據(jù)具體的需求配置為不同的功能。這在設(shè)計(jì)和開發(fā)中非常有價(jià)值,可以最大限度地利用有限的引腳資源,并實(shí)現(xiàn)多種功能和接口的擴(kuò)展。
單片機(jī)一般會(huì)提供多個(gè)功能復(fù)用的GPIO引腳。這些引腳可以被配置為具有不同的功能,例如UART、SPI、I2C、PWM等。用戶可以通過配置相關(guān)寄存器或開關(guān),選擇將GPIO引腳用于特定的功能。這樣,一個(gè)引腳就可以根據(jù)需求在不同的功能之間切換。
圖:GPIO內(nèi)部復(fù)用功能
7、模擬輸入/輸出
GPIO模擬輸入/輸出(GPIO analoginput/output)是使用通用輸入/輸出引腳(GPIO)來模擬模擬信號(hào)的輸入和輸出功能。
圖:GPIO內(nèi)部模擬輸入/輸出部分
三GPIO配置說明
GPIO的配置通常通過對(duì)相關(guān)寄存器的設(shè)置來實(shí)現(xiàn)。
GPIO模式可分為四種:GPIO輸入模式、GPIO輸出模式、AF模式(即復(fù)用)以及模擬模式。
下圖為GD單片機(jī)代碼中四種GPIO模式的名稱:
GPIO_MODE_INPUT:即GPIO輸入模式
GPIO_MODE_OUTPUT:即GPIO輸出模式
GPIO_MODE_AF:即GPIO復(fù)用模式
GPIO_MODE_ANALOG:即GPIO模擬模式
圖:代碼中4種GPIO模式的定義
1、GPIO輸入模式
圖:GPIO輸入模式寄存器配置表
GPIO輸入模式配置只需如下一行代碼即可。
配置函數(shù)為gpio_mode_set:
(1)參數(shù)1:GPIO組,如GPIOA
(2)參數(shù)2:GPIO模式,此處配置為輸入模式
(3)參數(shù)3:輸入模式下的IO配置,包括GPIO_PUPD_NONE(浮空模式,無上下拉電阻)、GPIO_PUPD_PULLUP(上拉模式,有上拉電阻)、GPIO_PUPD_PULLDOWN(下拉模式,有下拉電阻)三種;
(4)參數(shù)3:GPIO編號(hào),如上述配置為GPIO_PIN_2,則代表對(duì)PA2進(jìn)行配置;
2、GPIO輸出模式
圖:GPIO輸出模式寄存器配置表
GPIO輸出模式下可配置為推挽和開漏輸出兩種不同輸出類型。
推挽和開漏輸出各自可配置:GPIO_PUPD_NONE(浮空模式,無上下拉電阻)、GPIO_PUPD_PULLUP(上拉模式,有上拉電阻)、GPIO_PUPD_PULLDOWN(下拉模式,有下拉電阻)三種狀態(tài)。
GPIO輸出模式配置需要如下兩行代碼:
設(shè)置GPIO模式:GPIO_MODE_SET
(1)參數(shù)1:GPIO組設(shè)置,如GPIOA
(2)參數(shù)2:GPIO模式設(shè)置,此處應(yīng)為GPIO_MODE_OUTPUT
(3)參數(shù)3:GPIO狀態(tài)設(shè)置,可設(shè)置為GPIO_PUPD_NONE(浮空模式,無上下拉電阻)、GPIO_PUPD_PULLUP(上拉模式,有上拉電阻)、GPIO_PUPD_PULLDOWN(下拉模式,有下拉電阻)三種三種狀態(tài)
(4)參數(shù)4:GPIO編號(hào),如上述配置為GPIO_PIN_2,則代表對(duì)PA2進(jìn)行配置;
設(shè)置GPIO輸出配置:GPIO_OUTPUT_OPTIONS_SET
(1)參數(shù)1:GPIO組設(shè)置,如GPIOA
(2)參數(shù)2:GPIO輸出類型,此處GPIO_OTYPE_PP即推挽模式
(3)參數(shù)3:GPIO頻率設(shè)置,可設(shè)置GPIO_OSPEED_LEVEL0(2MHZ)、GPIO_OSPEED_LEVEL1(25MHZ)、GPIO_OSPEED_LEVEL2(50MHZ)、GPIO_OSPEED_LEVEL3(MAX)共4檔
(4)參數(shù)4:GPIO編號(hào),如上述配置為GPIO_PIN_2,則代表對(duì)PA2進(jìn)行配置;
3、AF模式
圖:AF模式寄存器配置表
GPIO復(fù)用功能可參考芯片手冊(cè)的AF_MAP,AF0~AF16中即為相應(yīng)引腳可復(fù)用的功能明細(xì)。
圖:GD單片機(jī)AF_MAP表格
AF模式配置需要增加如下一行代碼啟用復(fù)用模式:
啟用復(fù)用模式:gpio_af_set函數(shù)
(1)參數(shù)1:GPIO組設(shè)置,如GPIOA
(2)參數(shù)2:AF復(fù)用通道,根據(jù)數(shù)據(jù)手冊(cè)中的AF MAP,可查到每種通道對(duì)應(yīng)何種復(fù)用功能,如SPI對(duì)應(yīng)AF5通道,即設(shè)置GPIO_AF_5
(3)參數(shù)3:GPIO編號(hào),如上述配置為GPIO_PIN_2,則代表對(duì)PA2進(jìn)行配置;
4、模擬模式
模擬模式對(duì)應(yīng)為單片機(jī)的ADC/DAC引腳,配置為模擬模式后,GPIO默認(rèn)為GPIO_PUPD_NONE,無需配置上下拉;
模擬模式配置需要在gpio_mode_set函數(shù)中配置:
配置函數(shù)為gpio_mode_set:
(1)參數(shù)1:GPIO組設(shè)置,如GPIOA
(2)參數(shù)2:選擇GPIO_MODE_ANALOG
(3)參數(shù)3:只可配置GPIO_PUPD_NONE,即浮空輸入
(4)參數(shù)4:GPIO編號(hào),如上述配置為GPIO_PIN_2,則代表對(duì)PA2進(jìn)行配置;
四總結(jié)
GPIO是單片機(jī)中的重要功能,允許與外部電路進(jìn)行數(shù)字信號(hào)交互。
通過了解GPIO的結(jié)構(gòu)和配置方法,可以更好地控制和使用單片機(jī)的輸入輸出引腳,實(shí)現(xiàn)各種應(yīng)用需求。
審核編輯:湯梓紅
標(biāo)簽: