「技術(shù)文章」STM32 GPIO模式匯總分析
IO也叫GPIO,即通用輸入輸出端口,主要有一下幾種模式:
1、浮空輸入模式;
2、上拉輸入;
3、下拉輸入;
4、模擬輸入;
5、 推挽輸出;
6、 開(kāi)漏輸出;
7、 復(fù)用推挽輸出;
8、 復(fù)用開(kāi)漏輸出。
以下是對(duì)STM32 MCU 的GPIO進(jìn)行分析
1、浮空輸入模式

上圖紅色的表示便是浮空輸入的過(guò)程,外部輸入0時(shí),讀出的就是0;外部輸入1時(shí),讀出的就是1;外部沒(méi)有輸入,IO處于阻塞讀不出電平狀態(tài)。
用處:感覺(jué)在信號(hào)處理方面用的比較好,比如在讀取一段一段的波形,可以清晰的知道什么時(shí)候是0信號(hào),什么時(shí)候是1信號(hào),什么時(shí)候是沒(méi)有信號(hào)的。
類比:51單片機(jī)找不到類似的輸入模式
2、上拉輸入

上拉輸入和浮空輸入的區(qū)別是,上拉電阻的開(kāi)關(guān)關(guān)閉了,如上圖所示。
當(dāng)IO沒(méi)有輸入的時(shí)候,IO電平等于VDD即1電平;當(dāng)IO輸入低電平的事就是VDD和IO口形成一個(gè)閉環(huán)電路,根據(jù)分壓法IO口出分擔(dān)的電壓為0。
當(dāng)IO輸入為1時(shí),IO口電壓和VDD相等,上拉電阻好比斷開(kāi)了,IO口的電壓還是0。
用處:在按鍵使用的時(shí)候特別適用,按鍵的一端接地,一端接IO口,當(dāng)按鍵沒(méi)有按下的時(shí)候電平為高電平,當(dāng)按鍵按下的時(shí)候IO是低電平。
類比:51單片機(jī)P1 P2 P3口就是上拉輸入的,大家可以回憶一下51單片機(jī)的按鍵操作,我們應(yīng)該知道51單片機(jī)除了P0口內(nèi)部沒(méi)有上拉電阻其他的IO都有上拉電阻。大家應(yīng)該明白了51單片機(jī)沒(méi)有按鍵的時(shí)候,我們讀到的是高電平了吧!
小計(jì):
上拉輸入,不管輸入1還是不輸入IO的電平都是1,輸入IO口的電平是0。 PS按鍵是共地還是共VCC選擇的時(shí)候要慎重。
3、下拉輸入

下拉輸入和上拉輸入的區(qū)別是:上拉電阻的開(kāi)關(guān)打開(kāi)了,下拉電阻的開(kāi)關(guān)關(guān)閉了,如上圖所示。
當(dāng)IO沒(méi)有輸入的時(shí)候,IO電平等于VSS即0電平;當(dāng)IO輸入高電平的時(shí)候IO口就和VSS組成一個(gè)閉合電路,根據(jù)分壓法,電壓都分擔(dān)到了電阻上,所以IO口電平為高電平;當(dāng)IO輸入為低電平的時(shí)候,IO口肯定是低電平。
用處:在按鍵使用的時(shí)候特別適用,按鍵的一端接VCC,一端接IO口,當(dāng)按鍵沒(méi)有按下的時(shí)候電平為低電平,當(dāng)按鍵按下的時(shí)候IO是高電平電平。
類比:51單片機(jī)沒(méi)有類似的IO口
PS按鍵是共地還是共VCC選擇的時(shí)候要慎重。
4、模擬輸入

模擬輸入,大家看上圖的紅色的標(biāo)示。模擬輸入和其他輸入最大的區(qū)別:
1、沒(méi)有連接TTL觸發(fā)器,這樣保留最原始的電壓值,不是轉(zhuǎn)換過(guò)后的0和1信號(hào)
2、數(shù)據(jù)連接的終點(diǎn)不一樣,其他的輸入我們都是讀取輸入寄存器的值,而模擬輸入,數(shù)據(jù)直接送到片上外設(shè),一般是ADC。
5、 推挽輸出

推挽輸出:可以輸出高,低電平,連接數(shù)字器件;推挽結(jié)構(gòu)一般是指兩個(gè)三極管分別受兩互補(bǔ)信號(hào)的控制,總是在一個(gè)三極管導(dǎo)通的時(shí)候另一個(gè)截止.推挽電路是兩個(gè)參數(shù)相同的三極管或MOSFET,以推挽方式存在于電路中,各負(fù)責(zé)正負(fù)半周的波形放大任務(wù),電路工作時(shí),兩只對(duì)稱的功率開(kāi)關(guān)管每次只有一個(gè)導(dǎo)通,所以導(dǎo)通損耗小、效率高。輸出既可以向負(fù)載灌電流,也可以從負(fù)載抽取電流。推拉式輸出級(jí)既提高電路的負(fù)載能力,又提高開(kāi)關(guān)速度。
上圖就是推挽輸出的過(guò)程。上圖標(biāo)示的“2”便是我們的輸出寄存器,我們可以寫(xiě)入1或者0,如果寫(xiě)入1,圖上的“3”上面的P-mos導(dǎo)通,N-mos截止,IO口等價(jià)直接連接在VDD上,所以IO口電平是高電平。同理輸出寄存器的值為0時(shí),P-mos截止,N-mos導(dǎo)通。IO口直接連接在VSS上,所有IO口電平為低電平。
大家可能會(huì)問(wèn)圖上標(biāo)的1是什么?其實(shí)1的寄存器就是間接向輸出寄存器寫(xiě)入。
用處:適合做一些開(kāi)關(guān)控制,應(yīng)為推挽輸出可以快速的切換0和1,例如繼電器,led等。
類比:51單片機(jī)沒(méi)有類似的IO口
6、 開(kāi)漏輸出

開(kāi)漏輸出:輸出端相當(dāng)于三極管的集電極. 要得到高電平狀態(tài)需要上拉電阻才行. 適合于做電流型的驅(qū)動(dòng),其吸收電流的能力相對(duì)強(qiáng)(一般20ma以內(nèi))
上圖紅色標(biāo)示便是開(kāi)漏輸出的過(guò)程圖,圖上1和2的標(biāo)示已經(jīng)在推挽輸出中介紹了,此處不再說(shuō)明。開(kāi)漏輸出與推挽輸出唯一的區(qū)別就是開(kāi)漏輸出只有一個(gè)N-mos管。當(dāng)輸出寄存器的值為0的時(shí)候,n-mos導(dǎo)通,IO口直接連接VSS,輸出為低電平。當(dāng)輸出寄存器為1的時(shí)候,n-mos截止,IO口直接和輸出端斷開(kāi)了,處于浮空狀態(tài)。電平狀態(tài)不可控制。
大家可能會(huì)說(shuō),這樣設(shè)計(jì)不是傻缺么?有什么用設(shè)計(jì)這種輸出方式。其實(shí)這種方式很有用的,請(qǐng)看下面的類比
類比:
我們都知道51單片機(jī)PO口,是不是想到什么了?對(duì)PO口就是類似的開(kāi)漏輸出,PO口作為輸出的時(shí)候一定要加上拉電阻,加上上拉電阻后,輸入寄存器為1的時(shí)候,n-mos截止截止了,好比IO和輸出端斷開(kāi),這是IO口點(diǎn)壓就等于上拉電阻的電壓。這樣變輸出了高電平,如果IO口的高電平,連接到了外設(shè)低電平的,就會(huì)產(chǎn)生電流,電流不會(huì)流到IO口,(N-mos管截止了)直接流到外設(shè)。是不是增大了驅(qū)動(dòng)能力了。(IO口的驅(qū)動(dòng)能力有限,不能容忍大電流)。
通過(guò)改變上拉電阻的大小和電壓就能完成很多功能。
開(kāi)漏形式的電路有以下幾個(gè)特點(diǎn):
1. 利用外部電路的驅(qū)動(dòng)能力,減少I(mǎi)C內(nèi)部的驅(qū)動(dòng)。當(dāng)IC內(nèi)部MOSFET導(dǎo)通時(shí),驅(qū)動(dòng)電流是從外部的VCC流經(jīng)R pull-up ,MOSFET到GND。IC內(nèi)部?jī)H需很下的柵極驅(qū)動(dòng)電流。
2. 一般來(lái)說(shuō),開(kāi)漏是用來(lái)連接不同電平的器件,匹配電平用的,因?yàn)殚_(kāi)漏引腳不連接外部的上拉電阻時(shí),只能輸出低電平,如果需要同時(shí)具備輸出高電平的功能,則需要接上拉電阻,很好的一個(gè)優(yōu)點(diǎn)是通過(guò)改變上拉電源的電壓,便可以改變傳輸電平。比如加上上拉電阻就可以提供TTL/CMOS電平輸出等。(上拉電阻的阻值決定了邏輯電平轉(zhuǎn)換的沿的速度 。阻值越大,速度越低功耗越小,所以負(fù)載電阻的選擇要兼顧功耗和速度。)
3. OPEN-DRAIN提供了靈活的輸出方式,但是也有其弱點(diǎn),就是帶來(lái)上升沿的延時(shí)。因?yàn)樯仙厥峭ㄟ^(guò)外接上拉無(wú)源電阻對(duì)負(fù)載充電,所以當(dāng)電阻選擇小時(shí)延時(shí)就小,但功耗大;反之延時(shí)大功耗小。所以如果對(duì)延時(shí)有要求,則建議用下降沿輸出。
4. 可以將多個(gè)開(kāi)漏輸出的Pin,連接到一條線上。通過(guò)一只上拉電阻,在不增加任何器件的情況下,形成“與邏輯”關(guān)系。這也是I2C,SMBus等總線判斷總線占用狀態(tài)的原理。補(bǔ)充:什么是“線與”?:
在一個(gè)結(jié)點(diǎn)(線)上, 連接一個(gè)上拉電阻到電源 VCC 或 VDD 和 n 個(gè) NPN 或 NMOS 晶體管的集電極 C 或漏極 D, 這些晶體管的****極 E 或源極 S 都接到地線上, 只要有一個(gè)晶體管飽和, 這個(gè)結(jié)點(diǎn)(線)就被拉到地線電平上. 因?yàn)檫@些晶體管的基極注入電流(NPN)或柵極加上高電平(NMOS),晶體管就會(huì)飽和, 所以這些基極或柵極對(duì)這個(gè)結(jié)點(diǎn)(線)的關(guān)系是或非 NOR 邏輯. 如果這個(gè)結(jié)點(diǎn)后面加一個(gè)反相器, 就是或 OR 邏輯.
其實(shí)可以簡(jiǎn)單的理解為:在所有引腳連在一起時(shí),外接一上拉電阻,如果有一個(gè)引腳輸出為邏輯0,相當(dāng)于接地,與之并聯(lián)的回路“相當(dāng)于被一根導(dǎo)線短路”,所以外電路邏輯電平便為0,只有都為高電平時(shí),與的結(jié)果才為邏輯1。

該圖中左邊的便是推挽輸出模式,其中比較器輸出高電平時(shí)下面的PNP三極管截止,而上面NPN三極管導(dǎo)通,輸出電平VS+;當(dāng)比較器輸出低電平時(shí)則恰恰相反,PNP三極管導(dǎo)通,輸出和地相連,為低電平。右邊的則可以理解為開(kāi)漏輸出形式,需要接上拉。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。