基本結構分析
下面我們按圖中的編号對 GPIO 端口的結構部件進行說明。
1. 保護二極管及上、下拉電阻
引腳的兩個保護二級管可以防止引腳外部過高或過低的電壓輸入,當引腳電壓高于
VDD 時, 上方的二極管導通,當引腳電壓低于 VSS 時,下方的二極管導通,防止不正常電
壓引入晶片導緻晶片燒毀。盡管有這樣的保護,并不意味着 STM32 的引腳能直接外接大功
率驅動器件,如直接驅動電機,強制驅動要麼電機不轉,要麼導緻晶片燒壞,必須要加大
功率及隔離電路驅動。
2. P-MOS 管和 N-MOS 管
GPIO 引腳線路經過兩個保護二極管後,向上流向“輸入模式”結構,向下流向“輸出
模式”結構。先看輸出模式部分,線路經過一個由 P-MOS 和 N-MOS 管組成的單元電路。
這個結構使 GPIO 具有了“推挽輸出”和“開漏輸出”兩種模式。
所謂的推挽輸出模式,是根據這兩個 MOS 管的工作方式來命名的。在該結構中輸入
高電平時,經過反向後,上方的 P-MOS 導通,下方的 N-MOS 關閉,對外輸出高電平;而
在該結構中輸入低電平時,經過反向後, N-MOS 管導通, P-MOS 關閉,對外輸出低電平。
當引腳高低電平切換時,兩個管子輪流導通, P 管負責灌電流, N 管負責拉電流,使其負
載能力和開關速度都比普通的方式有很大的提高。推挽輸出的低電平為 0 伏,高電平為 3.3
伏,具體參考圖 8-2,它是推挽輸出模式時的等效電路。
而在開漏輸出模式時,上方的 P-MOS 管完全不工作。如果我們控制輸出為 0,低電平,
則 P-MOS 管關閉, N-MOS 管導通,使輸出接地,若控制輸出為 1 (它無法直接輸出高電平)
時,則 P-MOS 管和 N-MOS 管都關閉,是以引腳既不輸出高電平,也不輸出低電平,為高
阻态。為正常使用時必須外部接上拉電阻,參考圖 8-3 中等效電路。它具有“線與”特性,
也就是說,若有很多個開漏模式引腳連接配接到一起時,隻有當所有引腳都輸出高阻态,才由
上拉電阻提供高電平,此高電平的電壓為外部上拉電阻所接的電源的電壓。若其中一個引
腳為低電平,那線路就相當于短路接地,使得整條線路都為低電平, 0 伏。
推挽輸出模式一般應用在輸出電平為 0 和 3.3 伏而且需要高速切換開關狀态的場合。
在 STM32 的應用中,除了必須用開漏模式的場合,我們都習慣使用推挽輸出模式。
開漏輸出一般應用在 I2C、 SMBUS 通訊等需要“線與”功能的總線電路中。除此之外,
還用在電平不比對的場合,如需要輸出 5 伏的高電平,就可以在外部接一個上拉電阻, 上
拉電源為 5 伏, 并且把 GPIO 設定為開漏模式,當輸出高阻态時,由上拉電阻和電源向外
輸出 5 伏的電平,具體見圖 8-4。
1. 輸入模式(模拟/浮空/上拉/下拉)
在輸入模式時, 施密特觸發器打開, 輸出被禁止,可通過輸入資料寄存器 GPIOx_IDR
讀取 I/O 狀态。 其中輸入模式,可設定為上拉、下拉、 浮空和模拟輸入四種。 上拉和下拉
輸入很好了解, 預設的電平由上拉或者下拉決定。浮空輸入的電平是不确定的,完全由外
部的輸入決定,一般接按鍵的時候用的是這個模式。模拟輸入則用于 ADC 采集。
2. 輸出模式(推挽/開漏)
在輸出模式中, 推挽模式時雙 MOS 管以輪流方式工作,輸出資料寄存器 GPIOx_ODR
可控制 I/O 輸出高低電平。開漏模式時,隻有 N-MOS 管工作,輸出資料寄存器可控制 I/O
輸出高阻态或低電平。 輸出速度可配置,有 2MHz\10MHz\50MHz 的選項。此處的輸出速
度即 I/O 支援的高低電平狀态最高切換頻率,支援的頻率越高,功耗越大,如果功耗要求
不嚴格,把速度設定成最大即可。
在輸出模式時施密特觸發器是打開的,即輸入可用,通過輸入資料寄存器 GPIOx_IDR
可讀取 I/O 的實際狀态。
3. 複用功能(推挽/開漏)
複用功能模式中,輸出使能,輸出速度可配置,可工作在開漏及推挽模式,但是輸出
信号源于其它複用外設,輸出資料寄存器 GPIOx_ODR 無效;輸入可用,通過輸入資料寄存器
可擷取 I/O 實際狀态,但一般直接用複用外設的寄存器來擷取該資料信号。