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