大家好,我是知微!
學習過微控制器的小夥伴對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埠模式的介紹到這裡就結束了,看完之後是不是對這些概念清晰多了。
📢歡迎各位 👍點贊 ⭐收藏 📝評論,如有錯誤請留言指正,非常感謝!