第一次使用 MCU: GPIO 相關配置設計

Yi-Hsiu Hsu
程式愛好者
Published in
5 min readSep 20, 2020
STM32F411 IC圖

什麼是GPIO?

韌體工程師於程式編寫設計中,不只需要設計編寫的程式,因為有需要對應的硬體配置。因此對於我們來說,硬體也是相當重要的,但對於多數人來說,硬體功夫反而沒有非常深厚!因此此文只要是在描述該如何設置MCU上多數硬體設計。

MCU上的GPIO 設定全名為 General-purpose input/output 的縮寫 (中文名稱:通用型之輸入輸出) 。也就是利用編寫設定暫存器的方法來控制 MCU 上的腳位為輸出或輸入。這功能應用於簡單的電路上可說是十分的重要呢!

※註: 傳統 GPIO 輸出輸入電位多數為 5V,其較新 MCU 為了節省效率等需求,大多數漸漸的將 MCU 使用電源降低為 3.3V,因此 GPIO 腳位也跟著改為 3.3V。

GPIO 可分為輸入型與輸出型兩種,多數 MCU 會再去細分其配置模式的選擇,像是輸入型的配置模式可為 Floating, with/without pull-up/pull-down,而輸出型的配置模式可分為 Push-pull, open drain, with/without pull-up/pull-down。

下面敘述的設定皆來自 MCU STM32F411 的設計,各家 MCU 設定暫存器方法均不太一樣。為了讓使用者快速上手,像是瑞薩、ST、TI 等廠商均有提供他們各自設計的 API 提供使用者快速設定所需的功能,則可省略大量閱讀MCU datasheet 的過程。

GPIO 可分為兩類 (輸入型 與 輸出型):

輸入型:

當我們在設定 GPIO 為輸入型時,下路的 output buffer 會被 disable,而圖中的 Schmitt trigger [ A* ]會被 turn on,而上拉電阻/下拉電阻 [ B* ] 可經過 GPIOx_PUPDR 暫存器設定阻值。

Input floating/pull up/pull down configurations

輸出型:

當我們在設定 GPIO 為輸出型時,下路的 output buffer 會被 enable,此時下方 Output driver 分為兩種模式,Push-pull 與 Open-drain 電路 [C* ]。而圖中的 Schmitt trigger [ A* ]也會被 turn on,而上拉電阻/下拉電阻 [ B* ] 可經過 GPIOx_PUPDR 暫存器設定阻值。

Output configuration

文中所提相關名詞解釋:

[ A* ]: Schmitt trigger 施密特觸發器

Schmitt trigger 施密特觸發器為一正回饋的比較電路,當輸入電壓高於設定之閥值電壓時,輸出一正電壓;反之,當輸入電壓低於設定之閥值電壓時,輸出一低電壓。

[ B* ]: 上拉電阻/下拉電阻 (Pull-up & Pull-down resistor)

電路中為了讓其中一點維持一個電位的基準值,就可以利用使方法。上拉電阻/下拉電阻就是用來維持基準電位的。如果電路設計中這值為浮動的,易造成輸入或輸出腳位容易受到雜訊干擾 (亂數值)。

下面例子依 GPIO 設定為輸出為例:

上拉電阻:

當 GPIO 輸出為 Low 時,此時 I/O pin 則會讀到 VDD 這個電壓;反之,若 GPIO 輸出為 High 時,此時 I/O pin 則會讀到輸出 High 的電壓。

Pull-up resistor

下拉電阻:

當 GPIO 輸出為 Low 時,此時 I/O pin 則會讀到 VSS 這個電壓;反之,若 GPIO 輸出為 High 時,此時 I/O pin 則會讀到輸出 High 的電壓。

Pull-down resistor

[ C* ]: Push-pull 與 Open-drain 電路

▼Open-drain:

此電路看到名子就可以理解他是開路的形式,所以選擇此電路時,輸出部分必須加上一上拉電阻,透過下臂 N-MOS 當開關,來決定輸出為 On/off,而輸出電壓則為外部決定。要注意的是,若輸出沒有加上上拉電阻,此時的輸出則為浮接狀態,優點為可利用此電路做為電壓轉換的機制與IC只需要提供很小的閘極電流。

Open-drain

▼Push-Pull:

此時的電路有 P-MOS 與 N-MOS,這時的電路就是個 Totem pole 了。當輸出設定為低電位,上臂 P-MOS 導通,而下臂 N-MOS 關閉,因此輸出為低電位,如下圖路徑一;反之,當輸出為高電位時,上臂 P-MOS 關閉,而下臂 N-MOS 導通,因此輸出為高電位。因此這種方法不需要額外加上拉電阻,如下圖路徑二。此電路的優點為可以做為吸電流,也可做為灌電流,根據電壓來決定方向,但輸出電壓由IC電源決定。

Push-Pull 路徑一
Push-Pull 路徑二

--

--