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