「技術文章」STM32 GPIO模式匯總分析
IO也叫GPIO,即通用輸入輸出端口,主要有一下幾種模式:
1、浮空輸入模式;
2、上拉輸入;
3、下拉輸入;
4、模擬輸入;
5、 推挽輸出;
6、 開漏輸出;
7、 復用推挽輸出;
8、 復用開漏輸出。
以下是對STM32 MCU 的GPIO進行分析
1、浮空輸入模式
上圖紅色的表示便是浮空輸入的過程,外部輸入0時,讀出的就是0;外部輸入1時,讀出的就是1;外部沒有輸入,IO處于阻塞讀不出電平狀態(tài)。
用處:感覺在信號處理方面用的比較好,比如在讀取一段一段的波形,可以清晰的知道什么時候是0信號,什么時候是1信號,什么時候是沒有信號的。
類比:51單片機找不到類似的輸入模式
2、上拉輸入
上拉輸入和浮空輸入的區(qū)別是,上拉電阻的開關關閉了,如上圖所示。
當IO沒有輸入的時候,IO電平等于VDD即1電平;當IO輸入低電平的事就是VDD和IO口形成一個閉環(huán)電路,根據(jù)分壓法IO口出分擔的電壓為0。
當IO輸入為1時,IO口電壓和VDD相等,上拉電阻好比斷開了,IO口的電壓還是0。
用處:在按鍵使用的時候特別適用,按鍵的一端接地,一端接IO口,當按鍵沒有按下的時候電平為高電平,當按鍵按下的時候IO是低電平。
類比:51單片機P1 P2 P3口就是上拉輸入的,大家可以回憶一下51單片機的按鍵操作,我們應該知道51單片機除了P0口內(nèi)部沒有上拉電阻其他的IO都有上拉電阻。大家應該明白了51單片機沒有按鍵的時候,我們讀到的是高電平了吧!
小計:
上拉輸入,不管輸入1還是不輸入IO的電平都是1,輸入IO口的電平是0。 PS按鍵是共地還是共VCC選擇的時候要慎重。
3、下拉輸入
下拉輸入和上拉輸入的區(qū)別是:上拉電阻的開關打開了,下拉電阻的開關關閉了,如上圖所示。
當IO沒有輸入的時候,IO電平等于VSS即0電平;當IO輸入高電平的時候IO口就和VSS組成一個閉合電路,根據(jù)分壓法,電壓都分擔到了電阻上,所以IO口電平為高電平;當IO輸入為低電平的時候,IO口肯定是低電平。
用處:在按鍵使用的時候特別適用,按鍵的一端接VCC,一端接IO口,當按鍵沒有按下的時候電平為低電平,當按鍵按下的時候IO是高電平電平。
類比:51單片機沒有類似的IO口
PS按鍵是共地還是共VCC選擇的時候要慎重。
4、模擬輸入
模擬輸入,大家看上圖的紅色的標示。模擬輸入和其他輸入最大的區(qū)別:
1、沒有連接TTL觸發(fā)器,這樣保留最原始的電壓值,不是轉換過后的0和1信號
2、數(shù)據(jù)連接的終點不一樣,其他的輸入我們都是讀取輸入寄存器的值,而模擬輸入,數(shù)據(jù)直接送到片上外設,一般是ADC。
5、 推挽輸出
推挽輸出:可以輸出高,低電平,連接數(shù)字器件;推挽結構一般是指兩個三極管分別受兩互補信號的控制,總是在一個三極管導通的時候另一個截止.推挽電路是兩個參數(shù)相同的三極管或MOSFET,以推挽方式存在于電路中,各負責正負半周的波形放大任務,電路工作時,兩只對稱的功率開關管每次只有一個導通,所以導通損耗小、效率高。輸出既可以向負載灌電流,也可以從負載抽取電流。推拉式輸出級既提高電路的負載能力,又提高開關速度。
上圖就是推挽輸出的過程。上圖標示的“2”便是我們的輸出寄存器,我們可以寫入1或者0,如果寫入1,圖上的“3”上面的P-mos導通,N-mos截止,IO口等價直接連接在VDD上,所以IO口電平是高電平。同理輸出寄存器的值為0時,P-mos截止,N-mos導通。IO口直接連接在VSS上,所有IO口電平為低電平。
大家可能會問圖上標的1是什么?其實1的寄存器就是間接向輸出寄存器寫入。
用處:適合做一些開關控制,應為推挽輸出可以快速的切換0和1,例如繼電器,led等。
類比:51單片機沒有類似的IO口
6、 開漏輸出
開漏輸出:輸出端相當于三極管的集電極. 要得到高電平狀態(tài)需要上拉電阻才行. 適合于做電流型的驅動,其吸收電流的能力相對強(一般20ma以內(nèi))
上圖紅色標示便是開漏輸出的過程圖,圖上1和2的標示已經(jīng)在推挽輸出中介紹了,此處不再說明。開漏輸出與推挽輸出唯一的區(qū)別就是開漏輸出只有一個N-mos管。當輸出寄存器的值為0的時候,n-mos導通,IO口直接連接VSS,輸出為低電平。當輸出寄存器為1的時候,n-mos截止,IO口直接和輸出端斷開了,處于浮空狀態(tài)。電平狀態(tài)不可控制。
大家可能會說,這樣設計不是傻缺么?有什么用設計這種輸出方式。其實這種方式很有用的,請看下面的類比
類比:
我們都知道51單片機PO口,是不是想到什么了?對PO口就是類似的開漏輸出,PO口作為輸出的時候一定要加上拉電阻,加上上拉電阻后,輸入寄存器為1的時候,n-mos截止截止了,好比IO和輸出端斷開,這是IO口點壓就等于上拉電阻的電壓。這樣變輸出了高電平,如果IO口的高電平,連接到了外設低電平的,就會產(chǎn)生電流,電流不會流到IO口,(N-mos管截止了)直接流到外設。是不是增大了驅動能力了。(IO口的驅動能力有限,不能容忍大電流)。
通過改變上拉電阻的大小和電壓就能完成很多功能。
開漏形式的電路有以下幾個特點:
1. 利用外部電路的驅動能力,減少IC內(nèi)部的驅動。當IC內(nèi)部MOSFET導通時,驅動電流是從外部的VCC流經(jīng)R pull-up ,MOSFET到GND。IC內(nèi)部僅需很下的柵極驅動電流。
2. 一般來說,開漏是用來連接不同電平的器件,匹配電平用的,因為開漏引腳不連接外部的上拉電阻時,只能輸出低電平,如果需要同時具備輸出高電平的功能,則需要接上拉電阻,很好的一個優(yōu)點是通過改變上拉電源的電壓,便可以改變傳輸電平。比如加上上拉電阻就可以提供TTL/CMOS電平輸出等。(上拉電阻的阻值決定了邏輯電平轉換的沿的速度 。阻值越大,速度越低功耗越小,所以負載電阻的選擇要兼顧功耗和速度。)
3. OPEN-DRAIN提供了靈活的輸出方式,但是也有其弱點,就是帶來上升沿的延時。因為上升沿是通過外接上拉無源電阻對負載充電,所以當電阻選擇小時延時就小,但功耗大;反之延時大功耗小。所以如果對延時有要求,則建議用下降沿輸出。
4. 可以將多個開漏輸出的Pin,連接到一條線上。通過一只上拉電阻,在不增加任何器件的情況下,形成“與邏輯”關系。這也是I2C,SMBus等總線判斷總線占用狀態(tài)的原理。補充:什么是“線與”?:
在一個結點(線)上, 連接一個上拉電阻到電源 VCC 或 VDD 和 n 個 NPN 或 NMOS 晶體管的集電極 C 或漏極 D, 這些晶體管的****極 E 或源極 S 都接到地線上, 只要有一個晶體管飽和, 這個結點(線)就被拉到地線電平上. 因為這些晶體管的基極注入電流(NPN)或柵極加上高電平(NMOS),晶體管就會飽和, 所以這些基極或柵極對這個結點(線)的關系是或非 NOR 邏輯. 如果這個結點后面加一個反相器, 就是或 OR 邏輯.
其實可以簡單的理解為:在所有引腳連在一起時,外接一上拉電阻,如果有一個引腳輸出為邏輯0,相當于接地,與之并聯(lián)的回路“相當于被一根導線短路”,所以外電路邏輯電平便為0,只有都為高電平時,與的結果才為邏輯1。
該圖中左邊的便是推挽輸出模式,其中比較器輸出高電平時下面的PNP三極管截止,而上面NPN三極管導通,輸出電平VS+;當比較器輸出低電平時則恰恰相反,PNP三極管導通,輸出和地相連,為低電平。右邊的則可以理解為開漏輸出形式,需要接上拉。
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯(lián)系工作人員刪除。