「技術文章」STM32 GPIO模式彙總分析

IO也叫GPIO,即通用輸入輸出埠,主要有一下幾種模式:

1、浮空輸入模式;

2、上拉輸入;

3、下拉輸入;

4、模擬輸入;

5、 推輓輸出;

6、 開漏輸出;

7、 複用推輓輸出;

8、 複用開漏輸出。

以下是對STM32 MCU 的GPIO進行分析

1、浮空輸入模式

「技術文章」STM32 GPIO模式彙總分析

上圖紅色的表示便是浮空輸入的過程,外部輸入0時,讀出的就是0;外部輸入1時,讀出的就是1;外部沒有輸入,IO處於阻塞讀不出電平狀態。

用處:感覺在訊號處理方面用的比較好,比如在讀取一段一段的波形,可以清晰的知道什麼時候是0訊號,什麼時候是1訊號,什麼時候是沒有訊號的。

類比:51微控制器找不到類似的輸入模式

2、上拉輸入

「技術文章」STM32 GPIO模式彙總分析

上拉輸入和浮空輸入的區別是,上拉電阻的開關關閉了,如上圖所示。

當IO沒有輸入的時候,IO電平等於VDD即1電平;當IO輸入低電平的事就是VDD和IO口形成一個閉環電路,根據分壓法IO口出分擔的電壓為0。

當IO輸入為1時,IO口電壓和VDD相等,上拉電阻好比斷開了,IO口的電壓還是0。

用處:在按鍵使用的時候特別適用,按鍵的一端接地,一端接IO口,當按鍵沒有按下的時候電平為高電平,當按鍵按下的時候IO是低電平。

類比:51微控制器P1 P2 P3口就是上拉輸入的,大家可以回憶一下51微控制器的按鍵操作,我們應該知道51微控制器除了P0口內部沒有上拉電阻其他的IO都有上拉電阻。大家應該明白了51微控制器沒有按鍵的時候,我們讀到的是高電平了吧!

小計:

上拉輸入,不管輸入1還是不輸入IO的電平都是1,輸入IO口的電平是0。 PS按鍵是共地還是共VCC選擇的時候要慎重。

3、下拉輸入

「技術文章」STM32 GPIO模式彙總分析

下拉輸入和上拉輸入的區別是:上拉電阻的開關打開了,下拉電阻的開關關閉了,如上圖所示。

當IO沒有輸入的時候,IO電平等於VSS即0電平;當IO輸入高電平的時候IO口就和VSS組成一個閉合電路,根據分壓法,電壓都分擔到了電阻上,所以IO口電平為高電平;當IO輸入為低電平的時候,IO口肯定是低電平。

用處:在按鍵使用的時候特別適用,按鍵的一端接VCC,一端接IO口,當按鍵沒有按下的時候電平為低電平,當按鍵按下的時候IO是高電平電平。

類比:51微控制器沒有類似的IO口

PS按鍵是共地還是共VCC選擇的時候要慎重。

4、模擬輸入

「技術文章」STM32 GPIO模式彙總分析

模擬輸入,大家看上圖的紅色的標示。模擬輸入和其他輸入最大的區別:

1、沒有連線TTL觸發器,這樣保留最原始的電壓值,不是轉換過後的0和1訊號

2、資料連線的終點不一樣,其他的輸入我們都是讀取輸入暫存器的值,而模擬輸入,資料直接送到片上外設,一般是ADC。

5、 推輓輸出

「技術文章」STM32 GPIO模式彙總分析

推輓輸出:可以輸出高,低電平,連線數字器件;推輓結構一般是指兩個三極體分別受兩互補訊號的控制,總是在一個三極體導通的時候另一個截止。推輓電路是兩個引數相同的三極體或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、 開漏輸出

「技術文章」STM32 GPIO模式彙總分析

開漏輸出:輸出端相當於三極體的集電極。 要得到高電平狀態需要上拉電阻才行。 適合於做電流型的驅動,其吸收電流的能力相對強(一般20ma以內)

上圖紅色標示便是開漏輸出的過程圖,圖上1和2的標示已經在推輓輸出中介紹了,此處不再說明。開漏輸出與推輓輸出唯一的區別就是開漏輸出只有一個N-mos管。當輸出暫存器的值為0的時候,n-mos導通,IO口直接連線VSS,輸出為低電平。當輸出暫存器為1的時候,n-mos截止,IO口直接和輸出端斷開了,處於浮空狀態。電平狀態不可控制。

大家可能會說,這樣設計不是傻缺麼?有什麼用設計這種輸出方式。其實這種方式很有用的,請看下面的類比

類比:

我們都知道51微控制器PO口,是不是想到什麼了?對PO口就是類似的開漏輸出,PO口作為輸出的時候一定要加上拉電阻,加上上拉電阻後,輸入暫存器為1的時候,n-mos截止截止了,好比IO和輸出端斷開,這是IO口點壓就等於上拉電阻的電壓。這樣變輸出了高電平,如果IO口的高電平,連線到了外設低電平的,就會產生電流,電流不會流到IO口,(N-mos管截止了)直接流到外設。是不是增大了驅動能力了。(IO口的驅動能力有限,不能容忍大電流)。

透過改變上拉電阻的大小和電壓就能完成很多功能。

開漏形式的電路有以下幾個特點:

1。 利用外部電路的驅動能力,減少IC內部的驅動。當IC內部MOSFET導通時,驅動電流是從外部的VCC流經R pull-up ,MOSFET到GND。IC內部僅需很下的柵極驅動電流。

2。 一般來說,開漏是用來連線不同電平的器件,匹配電平用的,因為開漏引腳不連線外部的上拉電阻時,只能輸出低電平,如果需要同時具備輸出高電平的功能,則需要接上拉電阻,很好的一個優點是透過改變上拉電源的電壓,便可以改變傳輸電平。比如加上上拉電阻就可以提供TTL/CMOS電平輸出等。(上拉電阻的阻值決定了邏輯電平轉換的沿的速度 。阻值越大,速度越低功耗越小,所以負載電阻的選擇要兼顧功耗和速度。)

3。 OPEN-DRAIN提供了靈活的輸出方式,但是也有其弱點,就是帶來上升沿的延時。因為上升沿是透過外接上拉無源電阻對負載充電,所以當電阻選擇小時延時就小,但功耗大;反之延時大功耗小。所以如果對延時有要求,則建議用下降沿輸出。

4。 可以將多個開漏輸出的Pin,連線到一條線上。透過一隻上拉電阻,在不增加任何器件的情況下,形成“與邏輯”關係。這也是I2C,SMBus等匯流排判斷匯流排佔用狀態的原理。補充:什麼是“線與”?:

在一個結點(線)上, 連線一個上拉電阻到電源 VCC 或 VDD 和 n 個 NPN 或 NMOS 電晶體的集電極 C 或漏極 D, 這些電晶體的發射極 E 或源極 S 都接到地線上, 只要有一個電晶體飽和, 這個結點(線)就被拉到地線電平上。 因為這些電晶體的基極注入電流(NPN)或柵極加上高電平(NMOS),電晶體就會飽和, 所以這些基極或柵極對這個結點(線)的關係是或非 NOR 邏輯。 如果這個結點後面加一個反相器, 就是或 OR 邏輯。

其實可以簡單的理解為:在所有引腳連在一起時,外接一上拉電阻,如果有一個引腳輸出為邏輯0,相當於接地,與之並聯的迴路“相當於被一根導線短路”,所以外電路邏輯電平便為0,只有都為高電平時,與的結果才為邏輯1。

「技術文章」STM32 GPIO模式彙總分析

該圖中左邊的便是推輓輸出模式,其中比較器輸出高電平時下面的PNP三極體截止,而上面NPN三極體導通,輸出電平VS+;當比較器輸出低電平時則恰恰相反,PNP三極體導通,輸出和地相連,為低電平。右邊的則可以理解為開漏輸出形式,需要接上拉。