不到2000字,輕松帶你搞懂STM32中GPIO的8種工作模式
大家好,我是知微!
學(xué)習(xí)過單片機(jī)的小伙伴對(duì)GPIO肯定不陌生,GPIO (general purpose input output)是通用輸入輸出端口的簡(jiǎn)稱,通俗來講就是單片機(jī)上的引腳。
在STM32中,GPIO的工作模式被細(xì)分為8種,對(duì)于初學(xué)者來講,要理解它們可太難了!

誒誒誒,給個(gè)機(jī)會(huì),先別急著退出哈!
這不是有我在呢,跟著這篇文章學(xué)習(xí),保證你幾分鐘時(shí)間就能輕松掌握這8種工作模式。
那么,好戲開始咯!

輸入輸出
首先,我們先要知道一個(gè)概念,GPIO的輸入輸出都是相對(duì)于MCU(單片機(jī))來說的。
- MCU給引腳信號(hào),稱之為輸出
- MCU接收引腳給過來的信號(hào),則叫做輸入。
知道這個(gè)之后,我們就可以進(jìn)行下一步了,先從輸出說起。
四種輸出模式
1、 推挽輸出
我第一次聽到推挽這個(gè)詞的時(shí)候,一臉懵逼,啥玩意兒啊!其實(shí)看英文反而好理解,push-pull,也就是推拉的意思。
這個(gè)叫做推

這個(gè)叫做挽

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

- 當(dāng)輸出高電平時(shí),P-MOS導(dǎo)通,電流按下圖箭頭所示流出去,稱之為推,把電流推出去。

- 當(dāng)輸出低電平時(shí),N-MOS導(dǎo)通,電流按下圖箭頭所示流進(jìn)來,稱之為挽,把電流挽回來。

應(yīng)用場(chǎng)景:適用于通用的數(shù)字輸出場(chǎng)景,如點(diǎn)亮LED燈
2、開漏輸出
這又是一個(gè)不好理解的詞,開漏,是不是什么東西開了,然后漏出來了?
其實(shí)不是這樣的,開是開路的意思。開路表示電路中存在一個(gè)斷鏈,電流無法從一個(gè)點(diǎn)流到另一個(gè)點(diǎn)。
那么肯定有小伙伴會(huì)有疑問,開路和斷路有啥區(qū)別?
這里簡(jiǎn)單說明一下:
-
開路表示電路中不存在電流流動(dòng);
![]()
-
斷路表示電路中某一部分不通過電流流動(dòng),但是電路中仍然存在其他電流流動(dòng)的路徑

好了,話題不扯遠(yuǎn)了,繼續(xù)說開漏中的漏。
我們知道,MOS管的三個(gè)極分別是柵極(G)、源極(S)和漏極(D)。這里的漏就是MOS三個(gè)極中的漏極。

- 開漏輸出模式下,GPIO可以輸出低電平,也可以輸出高阻態(tài)。在此模式下,P-MOS始終處于關(guān)斷狀態(tài)。

- 當(dāng)輸出控制器將P-MOS關(guān)斷、N-MOS導(dǎo)通時(shí),此時(shí)輸出接VSS,輸出低電平

- 當(dāng)輸出控制器將P-MOS關(guān)斷、N-MOS關(guān)斷時(shí),相當(dāng)于什么都沒接,此時(shí)輸出浮空,相對(duì)于其它點(diǎn)的電阻無窮大,呈現(xiàn)高阻態(tài),可以理解為開路

應(yīng)用場(chǎng)景:適用于多個(gè)設(shè)備共享同一信號(hào)線,如I2C通信協(xié)議
3、復(fù)用推挽輸出
- 和推挽輸出同理,只不過此時(shí)的輸出控制器由片上外設(shè)控制

應(yīng)用場(chǎng)景:允許GPIO引腳用于微控制器的特定功能,如SPI、I2C、USART等接口,同時(shí)保持推挽輸出的特性
4、復(fù)用開漏輸出
- 和開漏輸出同理,只不過此時(shí)的輸出控制器由片上外設(shè)控制

應(yīng)用場(chǎng)景:適用于復(fù)用功能接口,且需要多設(shè)備共享通訊總線(如I2C)的場(chǎng)景
四種輸入模式
1、上拉輸入
你可以把輸入驅(qū)動(dòng)器框中,跟VDD和VSS連接的電阻,想象成兩個(gè)彈簧。
當(dāng)VDD的開關(guān)閉合時(shí),上拉電阻接通VDD,此時(shí)彈簧向上拉。
可以讀取I/O引腳狀態(tài),默認(rèn)為高電平。

應(yīng)用場(chǎng)景:常用于矩陣鍵盤或按鈕輸入
2、下拉輸入
當(dāng)VSS的開關(guān)閉合時(shí),下拉電阻接通VSS,此時(shí)彈簧向下拉。
可以讀取I/O引腳狀態(tài),默認(rèn)為低電平。

應(yīng)用場(chǎng)景:如按鈕開關(guān)連接到地時(shí)的檢測(cè)
3、浮空輸入
當(dāng)VDD和VSS的開關(guān)都斷開時(shí),此時(shí)彈簧既不向上拉,也不向下拉,處于一種懸空的狀態(tài)。
浮空輸入狀態(tài)下,讀取該端口的電平是不確定的。

應(yīng)用場(chǎng)景:常用于接收來自開關(guān)、鍵盤或其他數(shù)字接口的信號(hào)
4、模擬輸入
從圖示可以看到,之前的3種模式,輸入的信號(hào)都經(jīng)過了TTL施密特觸發(fā)器,把緩慢變化的模擬信號(hào)轉(zhuǎn)換成階段變化的數(shù)字信號(hào)。而這種模式,信號(hào)沒有經(jīng)過施密特觸發(fā)器,直接接到片上外設(shè)。
相較于其他輸入模式只能讀取到邏輯高/低電平(數(shù)字量),該模式能讀取到細(xì)微變化的值(模擬量)。
通俗來講就是,別的模式只能讀取0和1,而模擬輸入可以讀取到0-1的變化區(qū)間。

主要應(yīng)用:讀取來自傳感器(如溫度傳感器、電位計(jì))的模擬信號(hào)
好了,STM32的8種GPIO端口模式的介紹到這里就結(jié)束了,看完之后是不是對(duì)這些概念清晰多了。
??歡迎各位 ??點(diǎn)贊 ?收藏 ??評(píng)論,如有錯(cuò)誤請(qǐng)留言指正,非常感謝!


浙公網(wǎng)安備 33010602011771號(hào)