<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 「技術(shù)文章」STM32 GPIO模式匯總分析

「技術(shù)文章」STM32 GPIO模式匯總分析

發(fā)布人:電子資料庫 時(shí)間:2023-02-08 來(lái)源:工程師 發(fā)布文章

IO也叫GPIO,即通用輸入輸出端口,主要有一下幾種模式:
1、浮空輸入模式;
2、上拉輸入;
3、下拉輸入;
4、模擬輸入;
5、 推挽輸出;
6、 開(kāi)漏輸出;
7、 復用推挽輸出;
8、 復用開(kāi)漏輸出。

以下是對STM32 MCU 的GPIO進(jìn)行分析

1、浮空輸入模式

image.png


上圖紅色的表示便是浮空輸入的過(guò)程,外部輸入0時(shí),讀出的就是0;外部輸入1時(shí),讀出的就是1;外部沒(méi)有輸入,IO處于阻塞讀不出電平狀態(tài)。

用處:感覺(jué)在信號處理方面用的比較好,比如在讀取一段一段的波形,可以清晰的知道什么時(shí)候是0信號,什么時(shí)候是1信號,什么時(shí)候是沒(méi)有信號的。

類(lèi)比:51單片機找不到類(lèi)似的輸入模式

2、上拉輸入

image.png


上拉輸入和浮空輸入的區別是,上拉電阻的開(kāi)關(guān)關(guān)閉了,如上圖所示。

當IO沒(méi)有輸入的時(shí)候,IO電平等于VDD即1電平;當IO輸入低電平的事就是VDD和IO口形成一個(gè)閉環(huán)電路,根據分壓法IO口出分擔的電壓為0。

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

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

類(lèi)比:51單片機P1 P2 P3口就是上拉輸入的,大家可以回憶一下51單片機的按鍵操作,我們應該知道51單片機除了P0口內部沒(méi)有上拉電阻其他的IO都有上拉電阻。大家應該明白了51單片機沒(méi)有按鍵的時(shí)候,我們讀到的是高電平了吧!

小計:

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

3、下拉輸入

image.png


下拉輸入和上拉輸入的區別是:上拉電阻的開(kāi)關(guān)打開(kāi)了,下拉電阻的開(kāi)關(guān)關(guān)閉了,如上圖所示。

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

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

類(lèi)比:51單片機沒(méi)有類(lèi)似的IO口

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

4、模擬輸入

image.png


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

1、沒(méi)有連接TTL觸發(fā)器,這樣保留最原始的電壓值,不是轉換過(guò)后的0和1信號

2、數據連接的終點(diǎn)不一樣,其他的輸入我們都是讀取輸入寄存器的值,而模擬輸入,數據直接送到片上外設,一般是ADC。

5、 推挽輸出

image.png


推挽輸出:可以輸出高,低電平,連接數字器件;推挽結構一般是指兩個(gè)三極管分別受兩互補信號的控制,總是在一個(gè)三極管導通的時(shí)候另一個(gè)截止.推挽電路是兩個(gè)參數相同的三極管或MOSFET,以推挽方式存在于電路中,各負責正負半周的波形放大任務(wù),電路工作時(shí),兩只對稱(chēng)的功率開(kāi)關(guān)管每次只有一個(gè)導通,所以導通損耗小、效率高。輸出既可以向負載灌電流,也可以從負載抽取電流。推拉式輸出級既提高電路的負載能力,又提高開(kāi)關(guān)速度。

上圖就是推挽輸出的過(guò)程。上圖標示的“2”便是我們的輸出寄存器,我們可以寫(xiě)入1或者0,如果寫(xiě)入1,圖上的“3”上面的P-mos導通,N-mos截止,IO口等價(jià)直接連接在VDD上,所以IO口電平是高電平。同理輸出寄存器的值為0時(shí),P-mos截止,N-mos導通。IO口直接連接在VSS上,所有IO口電平為低電平。

大家可能會(huì )問(wèn)圖上標的1是什么?其實(shí)1的寄存器就是間接向輸出寄存器寫(xiě)入。

用處:適合做一些開(kāi)關(guān)控制,應為推挽輸出可以快速的切換0和1,例如繼電器,led等。

類(lèi)比:51單片機沒(méi)有類(lèi)似的IO口

6、 開(kāi)漏輸出

image.png


開(kāi)漏輸出:輸出端相當于三極管的集電極. 要得到高電平狀態(tài)需要上拉電阻才行. 適合于做電流型的驅動(dòng),其吸收電流的能力相對強(一般20ma以?xún)?

上圖紅色標示便是開(kāi)漏輸出的過(guò)程圖,圖上1和2的標示已經(jīng)在推挽輸出中介紹了,此處不再說(shuō)明。開(kāi)漏輸出與推挽輸出唯一的區別就是開(kāi)漏輸出只有一個(gè)N-mos管。當輸出寄存器的值為0的時(shí)候,n-mos導通,IO口直接連接VSS,輸出為低電平。當輸出寄存器為1的時(shí)候,n-mos截止,IO口直接和輸出端斷開(kāi)了,處于浮空狀態(tài)。電平狀態(tài)不可控制。

大家可能會(huì )說(shuō),這樣設計不是傻缺么?有什么用設計這種輸出方式。其實(shí)這種方式很有用的,請看下面的類(lèi)比
 
類(lèi)比:
 
我們都知道51單片機PO口,是不是想到什么了?對PO口就是類(lèi)似的開(kāi)漏輸出,PO口作為輸出的時(shí)候一定要加上拉電阻,加上上拉電阻后,輸入寄存器為1的時(shí)候,n-mos截止截止了,好比IO和輸出端斷開(kāi),這是IO口點(diǎn)壓就等于上拉電阻的電壓。這樣變輸出了高電平,如果IO口的高電平,連接到了外設低電平的,就會(huì )產(chǎn)生電流,電流不會(huì )流到IO口,(N-mos管截止了)直接流到外設。是不是增大了驅動(dòng)能力了。(IO口的驅動(dòng)能力有限,不能容忍大電流)。
 
通過(guò)改變上拉電阻的大小和電壓就能完成很多功能。

開(kāi)漏形式的電路有以下幾個(gè)特點(diǎn):

1. 利用外部電路的驅動(dòng)能力,減少I(mǎi)C內部的驅動(dòng)。當IC內部MOSFET導通時(shí),驅動(dòng)電流是從外部的VCC流經(jīng)R pull-up ,MOSFET到GND。IC內部?jì)H需很下的柵極驅動(dòng)電流。

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

3. OPEN-DRAIN提供了靈活的輸出方式,但是也有其弱點(diǎn),就是帶來(lái)上升沿的延時(shí)。因為上升沿是通過(guò)外接上拉無(wú)源電阻對負載充電,所以當電阻選擇小時(shí)延時(shí)就小,但功耗大;反之延時(shí)大功耗小。所以如果對延時(shí)有要求,則建議用下降沿輸出。

4. 可以將多個(gè)開(kāi)漏輸出的Pin,連接到一條線(xiàn)上。通過(guò)一只上拉電阻,在不增加任何器件的情況下,形成“與邏輯”關(guān)系。這也是I2C,SMBus等總線(xiàn)判斷總線(xiàn)占用狀態(tài)的原理。補充:什么是“線(xiàn)與”?:

在一個(gè)結點(diǎn)(線(xiàn))上, 連接一個(gè)上拉電阻到電源 VCC 或 VDD 和 n 個(gè) NPN 或 NMOS 晶體管的集電極 C 或漏極 D, 這些晶體管的****極 E 或源極 S 都接到地線(xiàn)上, 只要有一個(gè)晶體管飽和, 這個(gè)結點(diǎn)(線(xiàn))就被拉到地線(xiàn)電平上. 因為這些晶體管的基極注入電流(NPN)或柵極加上高電平(NMOS),晶體管就會(huì )飽和, 所以這些基極或柵極對這個(gè)結點(diǎn)(線(xiàn))的關(guān)系是或非 NOR 邏輯. 如果這個(gè)結點(diǎn)后面加一個(gè)反相器, 就是或 OR 邏輯.

其實(shí)可以簡(jiǎn)單的理解為:在所有引腳連在一起時(shí),外接一上拉電阻,如果有一個(gè)引腳輸出為邏輯0,相當于接地,與之并聯(lián)的回路“相當于被一根導線(xiàn)短路”,所以外電路邏輯電平便為0,只有都為高電平時(shí),與的結果才為邏輯1。

image.png


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


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: GPIO 匯總

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>