不到2000字,輕鬆帶你搞懂STM32中GPIO的8種工作模式

知微之见發表於2024-04-04

大家好,我是知微

學習過微控制器的小夥伴對GPIO肯定不陌生,GPIO (general purpose input output)是通用輸入輸出埠的簡稱,通俗來講就是微控制器上的引腳。

在STM32中,GPIO的工作模式被細分為8種,對於初學者來講,要理解它們可太難了!

誒誒誒,給個機會,先別急著退出哈!

這不是有我在呢,跟著這篇文章學習,保證你幾分鐘時間就能輕鬆掌握這8種工作模式。

那麼,好戲開始咯!

輸入輸出

首先,我們先要知道一個概念,GPIO的輸入輸出都是相對於MCU(微控制器)來說的。

  • MCU給引腳訊號,稱之為輸出
  • MCU接收引腳給過來的訊號,則叫做輸入。

知道這個之後,我們就可以進行下一步了,先從輸出說起。

四種輸出模式

1、 推輓輸出

我第一次聽到推輓這個詞的時候,一臉懵逼,啥玩意兒啊!其實看英文反而好理解,push-pull,也就是推拉的意思。

這個叫做推

這個叫做挽

  • 推輓輸出模式下,GPIO可以輸出高電平,也可以輸出低電平。

  • 輸出高電平時,P-MOS導通,電流按下圖箭頭所示流出去,稱之為,把電流推出去。

  • 輸出低電平時,N-MOS導通,電流按下圖箭頭所示流進來,稱之為,把電流挽回來。

應用場景:適用於通用的數字輸出場景,如點亮LED燈

2、開漏輸出

這又是一個不好理解的詞,開漏,是不是什麼東西開了,然後漏出來了?

其實不是這樣的,是開路的意思。開路表示電路中存在一個斷鏈,電流無法從一個點流到另一個點。

那麼肯定有小夥伴會有疑問,開路和斷路有啥區別?

這裡簡單說明一下:

  • 開路表示電路中不存在電流流動;

  • 斷路表示電路中某一部分不透過電流流動,但是電路中仍然存在其他電流流動的路徑

好了,話題不扯遠了,繼續說開漏中的漏。

我們知道,MOS管的三個極分別是柵極(G)、源極(S)和漏極(D)。這裡的就是MOS三個極中的漏極。

  • 開漏輸出模式下,GPIO可以輸出低電平,也可以輸出高阻態。在此模式下,P-MOS始終處於關斷狀態

  • 當輸出控制器將P-MOS關斷、N-MOS導通時,此時輸出接VSS,輸出低電平

  • 當輸出控制器將P-MOS關斷、N-MOS關斷時,相當於什麼都沒接,此時輸出浮空,相對於其它點的電阻無窮大,呈現高阻態,可以理解為開路

應用場景:適用於多個裝置共享同一訊號線,如I2C通訊協議

3、複用推輓輸出

  • 和推輓輸出同理,只不過此時的輸出控制器由片上外設控制

應用場景:允許GPIO引腳用於微控制器的特定功能,如SPI、I2C、USART等介面,同時保持推輓輸出的特性

4、複用開漏輸出

  • 和開漏輸出同理,只不過此時的輸出控制器由片上外設控制

應用場景:適用於複用功能介面,且需要多裝置共享通訊匯流排(如I2C)的場景

四種輸入模式

1、上拉輸入

你可以把輸入驅動器框中,跟VDD和VSS連線的電阻,想象成兩個彈簧。

當VDD的開關閉合時,上拉電阻接通VDD,此時彈簧向上拉。

可以讀取I/O引腳狀態,預設為高電平。

應用場景:常用於矩陣鍵盤或按鈕輸入

2、下拉輸入

當VSS的開關閉合時,下拉電阻接通VSS,此時彈簧向下拉。

可以讀取I/O引腳狀態,預設為低電平。

應用場景:如按鈕開關連線到地時的檢測

3、浮空輸入

當VDD和VSS的開關都斷開時,此時彈簧既不向上拉,也不向下拉,處於一種懸空的狀態。

浮空輸入狀態下,讀取該埠的電平是不確定的。

應用場景:常用於接收來自開關、鍵盤或其他數字介面的訊號

4、模擬輸入

從圖示可以看到,之前的3種模式,輸入的訊號都經過了TTL施密特觸發器,把緩慢變化的模擬訊號轉換成階段變化的數字訊號。而這種模式,訊號沒有經過施密特觸發器,直接接到片上外設。

相較於其他輸入模式只能讀取到邏輯高/低電平(數字量),該模式能讀取到細微變化的值(模擬量)。

通俗來講就是,別的模式只能讀取0和1,而模擬輸入可以讀取到0-1的變化區間。

主要應用:讀取來自感測器(如溫度感測器、電位計)的模擬訊號

好了,STM32的8種GPIO埠模式的介紹到這裡就結束了,看完之後是不是對這些概念清晰多了。

📢歡迎各位 👍點贊 ⭐收藏 📝評論,如有錯誤請留言指正,非常感謝!

相關文章