Skip to content

STM32 GPIO 簡介

發佈

前言

GPIO(General Purpose Input/Output)可以說是微控制器最基本的功能,因此第一堂當然要先教 GPIO 的使用方式。

在本文中,將會介紹 STM32 的基本輸出與輸入的設定及模式。

STM32 的 GPIO 簡介

相比於 Arduino,STM32 在使用 GPIO 時,要設定和注意的地方有很多,因此我先簡單介紹一下 STM32 的 GPIO。

首先最基本的,在設定 GPIO 時除了可以指定這個 Pin 腳是要是「General Purpose」的 Input 還是 Output 外,還有所謂的「Alternate Function(AF,復用功能)」,也可以設定是否啓用 STM32 內建的 上/下拉電阻(Pull-Up/Down Resistor)。

若選擇的是 Output 的話,還要設定輸出電路組態是「Push-Pull(PP,推挽)」或「Open-Drain(OD,汲極開路)」,和設定 IO 的速度(如 2MHz)。

如果是 Input 的話則有「類比(Analog)」與「浮接(Floating)」輸入,使用浮接輸入時也常常搭配 STM32 內建的上/下拉電阻使用。

功能模式:

輸出電路組態:

輸入模式:

上面的內容涉及一些基本電學或電子學的知識,以上僅簡單介紹。

▲ GPIO 內部架構圖。取自 ST Wiki: GPIO internal peripheral。
▲ GPIO 內部架構圖。取自 ST Wiki: GPIO internal peripheral。

剛開始使用 STM32 時可能會搞不太懂上面這些,尤其是 AF 的部分,簡單來說,「General Purpose」就是可以單純地人為控制輸出 High/Low,而使用「Alternate Function」則會將控制 High/Low 的權利和責任交給指定的特殊功能,例如指定該 Pin 腳為 UART-Tx,那我就沒辦法直接設定它要 High 還是 Low,因為 UART-Tx 的 High/Low 要依據其通訊協定和資料來決定,我們只能告訴 UART 要傳送的資料是什麼,再由 UART 來依據此資料自動控制該 Pin 腳的 High/Low 以完成通訊。

而「Push-Pull」和「Open-Drain」不知道要怎麼選的話,一般都是用「Push-Pull」,因為它可以直接輸出強高或強低,但最好還是去詳細瞭解它們的差異。

另外,STM32 並非所有 Pin 腳都可以相容/承受 5V 的電壓,有些僅能 3.3V,且每個型號每支接腳都不一樣,在接電路或購買電子零件時,請查看 Datasheet 並多加留意是否需要電平轉換。

指定 Alternate Function

對於非 F1 系列的 STM32,要使用 AF 功能時,還有知道目標功能是「AF 幾?」。

以 STM32F446RE 為例,在其 Datasheet DS10693 中的「Table 11. Alternate function」有把各個 AF 及其功能對應好。

例如要把 PA2 及 PA3 腳當成 USART2 的 Tx 與 Rx 使用的話,要設定這兩腳要啓用的 AF 為「AF7」。

▲ GPIO 與 AF 功能的對應表。取自 DS10693 Rev10 P.57。
▲ GPIO 與 AF 功能的對應表。取自 DS10693 Rev10 P.57。

小結

今天簡單說明了 STM32 GPIO 的模式,這些算是基本中的基本,只要弄清楚,未來在使用時就會輕鬆很多,明天終於要正式寫程式了。

另外,在 STM32 中,STM32F1 是一個比較特別的系列,它的一些設計及用法和其它系列不同(例如 AF 的設定、GPIO Remap),這點可以多注意一下。

p.s. 我其實一直不確定要怎麼翻譯「Alternate Function」比較貼切,只好先使用簡體圈常見的用詞。

參考資料

本文同步發表於 iT 邦幫忙-2022 iThome 鐵人賽


STM32 LibOpenCM3:GPIO 輸出
STM32 IDE:PlatformIO

留言可能不會立即顯示。若過了幾天仍未出現,請 Email 聯繫:)