人人干人人模-人人干人人看-人人干人人搞-人人干人人干人人干-人人干人人干-人人干人人插

您現(xiàn)在的位置:首頁 > 服務(wù)支持 > 資訊動態(tài)資訊動態(tài)

GPIO基本知識

     GPIO是通用輸入/輸出端口的簡稱,是STM32可控制的引腳。GPIO的引腳與外部硬件設(shè)備連接,可實現(xiàn)與外部通訊、控制外部硬件或者采集外部硬件數(shù)據(jù)的功能。那STM32引腳是如何分類的?GPIO內(nèi)部結(jié)構(gòu)是怎樣的,隨海翎光電的小編一起看看吧!

一、GPIO是什么?

GPIO(英語:General-purpose input/output)

通用輸入輸出端口的簡稱。可以通過軟件控制其輸出和輸入。stm32芯片的GPIO引腳與外部設(shè)備連接起來,GPIO既然一個引腳可以用于輸入、輸出或其他特殊功能,那么一定有寄存器用來選擇這些功能。對于輸入,一定可以通過讀取某個寄存器來確定引腳電位的高低;對于輸出,一定可以通過寫入某個寄存器來讓這個引腳輸出高電位或者低電位;對于其他特殊功能,則有另外的寄存器來控制它們。

二、STM32引腳分類

11.jpg

1.電源管腳:引腳圖中的 VDD、VSS、VREF+、VREF-、VSSA、VDDA 等都屬于電源引腳。
2.晶振管腳:引腳圖中的 PC14、PC15 和 OSC_IN、OSC_OUT 都屬于晶振引腳,不過它們還可以作為普通引腳使用。
3.復(fù)位管腳: 引腳圖中的 NRST 屬于復(fù)位引腳,不做其他功能使用。
4.下載引腳:引腳圖中的 PA13、PA14、PA15、PB3 和 PB4 屬于 JTAG 或SW 下載引腳。不過它們還可以作為普通引腳或者特殊功能使用,具體的功能可以查看芯片數(shù)據(jù)手冊,里面都會有附加功能說明。當(dāng)然,STM32 的串口功能引腳也是可以作為下載引腳使用。
5.T BOOT  引腳:引腳圖中的 BOOT0 和 PB2(BOOT1)屬于 BOOT 引腳,PB2 還可以作為普通管腳使用。在 STM32 啟動中會有模式選擇,其中就是依靠著 BOOT0和 BOOT1 的電平來決定。
6.GPIO管腳:引腳圖中的 PA、PB、PC、PD 等均屬于 GPIO 引腳。從引腳圖可以看出,GPIO 占用了 STM32 芯片大部分的引腳。并且每一個端口都有 16 個引腳,比如 PA 端口,它有 PA0-PA15。其他的 PB、PC 等端口是一樣的。

三、GPIO內(nèi)部結(jié)構(gòu)

12.jpg

圖中最右端 I/O 端口是STM32 芯片的引腳,其它部分都在 STM32 芯片內(nèi)部。

(1)保護二極管

  • 引腳內(nèi)部加上這兩個保護二級管可以防止引腳外部過高或過低的電壓輸入。
  • 當(dāng)引腳電壓高于 VDD_FT 或 VDD 時,上方的二極管導(dǎo)通吸收這個高電壓。
  • 當(dāng)引腳電壓低于 VSS 時,下方的二極管導(dǎo)通,防止不正常電壓引入芯片導(dǎo)致芯片燒毀。

(2)上下拉電阻

  • 上拉和下拉電阻上都有一個開關(guān),通過配置上下拉電阻開關(guān),可以控制引腳的默認(rèn)狀態(tài)電平。
  • 當(dāng)開啟上拉時引腳默認(rèn)電壓為高電平,
  • 開啟下拉時,引腳默認(rèn)電壓為低電平,這樣就可以消除引腳不定狀態(tài)的影響。
  • 將上拉和下拉的開關(guān)都關(guān)斷,這種狀態(tài)我們稱為浮空模式,一旦配置成這個模式,引腳的電壓是不確定的,如果用萬用表測量此模式下管腳電壓時會發(fā)現(xiàn)只有 1 點幾伏,而且還不時改變,所以一般情況下我們都會給引腳設(shè)置成上拉或者下拉模式,使它有一個默認(rèn)狀態(tài)。
  • STM32 上下拉及浮空模式的配置是通過GPIOx_CRL 和 GPIOx_CRH 寄存器控制的。
  • STM32 內(nèi)部的上拉其實是一個弱上拉,也就是說通過此上拉電阻輸出的電流很小,如果想要輸出一個大電流,那么就需要外接上拉電阻了。

(3)、P-MOS 和 和 S N-MOS 

  • GPIO 引腳經(jīng)過兩個保護二極管后就分成兩路,
  • 上面一路是“輸入模式”,下面一路是“輸出模式”。
  • 輸出模式,線路經(jīng)過一個由 P-MOS 和 N-MOS管組成的單元電路,這讓 GPIO 引腳具有了推挽和開漏兩種輸出模式
  • 推挽輸出模式,是根據(jù) P-MOS 和 N-MOS 管的工作方式命名的。
  • 在該結(jié)構(gòu)單元輸入一個高電平時,P-MOS 管導(dǎo)通,N-MOS 管截止,對外輸出高電平(3.3V)。
  • 在該單元輸入一個低電平時,P-MOS 管截止,N-MOS 管導(dǎo)通,對外輸出低電平(0V)。
  • 如果當(dāng)切換輸入高低電平時,兩個 MOS 管將輪流導(dǎo)通,一個負(fù)責(zé)灌電流(電流輸出到負(fù)載),一個負(fù)責(zé)拉電流(負(fù)載電流流向芯片),使其負(fù)載能力和開關(guān)速度都比普通的方式有很大的提高。下圖為推挽輸出模式的等效電路。

13.jpg


  • 在開漏輸出模式時,不論輸入是高電平還是低電平,P-MOS 管總處于關(guān)閉狀態(tài)。
  • 當(dāng)給這個單元電路輸入低電平時,N-MOS 管導(dǎo)通,輸出即為低電平。
  • 當(dāng)輸入高電平時,N-MOS 管截止,這個時候引腳狀態(tài)既不是高電平,又不是低電平,我們稱之為高阻態(tài)。
  • 如果想讓引腳輸出高電平,那么引腳必須外接一個上拉電阻,由上拉電阻提供高電平。開漏輸出模式等效電路圖如下圖所示。

14.jpg

  •  在開漏輸出模式中還有一個特點,引腳具有“線與”關(guān)系即多個開漏輸出模式的引腳接在一起,只要有一個引腳為低電平,其他所有管腳都為低電平,即把所有引腳連接在一起的這條總線拉低了。

  • 只有當(dāng)所有引腳輸出高阻態(tài)時這條總線的電平才由上拉電阻的 VDD 決定。如果 VDD 連接的是 3.3V,那么引腳輸出的就是 3.3V,如果 VDD 連接的是 5V,那么引腳輸出的就是 5V。因此如果想要讓 STM32 管腳輸出 5V,可以選擇開漏輸出模式,然后在外接上拉電阻的電源 VDD 選擇 5V 即可,前提是這個 STM32 引腳是容忍 5V 的。開漏輸出模式一般應(yīng)用在 I2C、SMBUS 通訊等需要“線與”功能的總線電路中。還可以用在電平不匹配的場合中,就如上面說的輸出 5V 一樣。
  • 推挽輸出模式一般應(yīng)用在輸出電平為 0-3.3V 而且需要高速切換開關(guān)狀態(tài)的場合。除了必須要用開漏輸出模式的場合,我們一般選擇推挽輸出模式。要配置引腳是開漏輸出還是推挽輸出模式可以使用GPIOx_CRL 和 GPIOx_CRH 寄存器。

(4)、輸出數(shù)據(jù)寄存器
雙 MOS 管結(jié)構(gòu)電路的輸入信號,是由 GPIO“輸出數(shù)據(jù)寄存器GPIOx_ODR”提供的,因此我們通過修改輸出數(shù)據(jù)寄存器的值就可以修改 GPIO 引腳的輸出電平。而“置位/復(fù)位寄存器 GPIOx_BSRR”可以通過修改輸出數(shù)據(jù)寄存器的值從而影響電路的輸出。

(5)、復(fù)用功能輸出
由于 STM32 的 GPIO 引腳具有第二功能,因此當(dāng)使用復(fù)用功能的時候,也就是通過其他外設(shè)復(fù)用功能輸出信號與 GPIO 數(shù)據(jù)寄存器一起連接到雙 MOS 管電路的輸入,其中梯形結(jié)構(gòu)是用來選擇使用復(fù)用功能還是普通 IO 口功能。例如我們使用 USART 串口通訊時,需要用到某個 GPIO 引腳作為通訊發(fā)送引腳,這個時候就可以把該 GPIO 引腳配置成 USART 串口復(fù)用功能,由串口外設(shè)控制該引腳,發(fā)送數(shù)據(jù)。

(6)、輸入數(shù)據(jù)寄存器
輸入數(shù)據(jù)寄存器是由 IO 口經(jīng)過上下拉電阻、施密特觸發(fā)器引入。當(dāng)信號經(jīng)過觸發(fā)器,模擬信號將變?yōu)閿?shù)字信號 0 或 1,然后存儲在輸入數(shù)據(jù)寄存器中,通過讀取輸入數(shù)據(jù)寄存器 GPIOx_IDR 就可以知道 IO 口的電平狀態(tài)。
(7)、復(fù)用功能輸入
此模式與復(fù)用功能輸出類似。在復(fù)用功能輸入模式時,GPIO 引腳的信號傳輸?shù)?STM32 其他片上外設(shè),由該外設(shè)讀取引腳的狀態(tài)。同樣,如我們使用 USART 串口通訊時,需要用到某個 GPIO 引腳作為通訊接收引腳,這個時候就可以把該 GPIO 引腳配置成 USART 串口復(fù)用功能,使 USART 可以通過該通訊引腳的接收遠(yuǎn)端數(shù)據(jù)。
(8)、模擬輸入輸出
當(dāng) GPIO 引腳用于 ADC 采集電壓的輸入通道時,用作“模擬輸入”功能,此時信號是不經(jīng)過施密特觸發(fā)器的,因為經(jīng)過施密特觸發(fā)器后信號只有 0、1 兩種狀態(tài),ADC 外設(shè)要采集到原始的模擬信號,信號源輸入必須在施密特觸發(fā)器之前。類似地,當(dāng) GPIO 引腳用于 DAC 作為模擬電壓輸出通道時,此時作為“模擬輸出”功能, DAC 的模擬信號輸出就不經(jīng)過雙 MOS 管結(jié)構(gòu)了,模擬信號直接通過管腳輸出。

四、GPIO具有8種模式,四種輸入模式,四種輸出模式。

輸入模式:

輸入浮空 GPIO_Mode_IN_FLOATING
輸入上拉 GPIO_Mode_IPU
輸入下拉 GPIO_Mode_IPD
模擬輸入 GPIO_Mode_AIN

輸出模式:

開漏輸出(上拉或者下拉)GPIO_Mode_Out_OD

開漏復(fù)用功能(上拉或者下拉)GPIO_Mode_AF_OD

推挽式輸出(上拉或者下拉)GPIO_Mode_Out_PP

推挽式復(fù)用功能(上拉或者下拉)GPIO_Mode_AF_PP

四種最大輸出速度:

2MHZ

25MHZ

50MHZ

1000MHZ

 

五、GPIO8種模式含義

輸入浮空:浮空就是邏輯器件與引腳即不接高電平,也不接低電平。由于邏輯器件的內(nèi)部結(jié)構(gòu),當(dāng)它輸入引腳懸空時,相當(dāng)于該引腳接了高電平。一般實際運用時,引腳不建議懸空,易受干擾。通俗講就是浮空就是浮在空中,就相當(dāng)于此端口在默認(rèn)情況下什么都不接,呈高阻態(tài),這種設(shè)置在數(shù)據(jù)傳輸時用的比較多。浮空最大的特點就是電壓的不確定性,它可能是0V,頁可能是VCC,還可能是介于兩者之間的某個值(最有可能) 浮空一般用來做ADC輸入用,這樣可以減少上下拉電阻對結(jié)果的影響。

1.png

輸入上拉模式:上拉就是把點位拉高,比如拉到Vcc。上拉就是將不確定的信號通過一個電阻嵌位在高電平。電阻同時起到限流的作用。弱強只是上拉電阻的阻值不同,沒有什么嚴(yán)格區(qū)分。

2.png

輸入下拉:就是把電壓拉低,拉到GND。與上拉原理相似。

3.png

模擬輸入:模擬輸入是指傳統(tǒng)方式的輸入,數(shù)字輸入是輸入PCM數(shù)字信號,即0,1的二進制數(shù)字信號,通過數(shù)模轉(zhuǎn)換,轉(zhuǎn)換成模擬信號,經(jīng)前級放大進入功率放大器,功率放大器還是模擬的。

4.png

開漏輸出:輸出端相當(dāng)于三極管的集電極,要得到高電平狀態(tài)需要上拉電阻才行,適合于做電流型的驅(qū)動,其吸收電流的能力相對強(一般20mA以內(nèi))。
開漏形式的電路有以下幾個特點:
1. 利用外部電路的驅(qū)動能力,減少IC內(nèi)部的驅(qū)動。當(dāng)IC內(nèi)部MOSFET導(dǎo)通時,驅(qū)動電流是從外部的VCC流經(jīng)R pull-up ,MOSFET到GND。IC內(nèi)部僅需很下的柵極驅(qū)動電流。
2. 一般來說,開漏是用來連接不同電平的器件,匹配電平用的,因為開漏引腳不連接外部的上拉電阻時,只能輸出低電平,如果需要同時具備輸出高電平的功能,則需要接上拉電阻,很好的一個優(yōu)點是通過改變上拉電源的電壓,便可以改變傳輸電平。比如加上上拉電阻就可以提供TTL/CMOS電平輸出等。(上拉電阻的阻 決定了邏輯電平轉(zhuǎn)換的沿的速度 。阻 越大,速度越低功耗越小,所以負(fù)載電阻的選擇要兼顧功耗和速度。)
3. OPEN-DRAIN提供了靈活的輸出方式,但是也有其弱點,就是帶來上升沿的延時。因為上升沿是通過外接上拉無源電阻對負(fù)載充電,所以當(dāng)電阻選擇小時延時就小,但功耗大;反之延時大功耗小。所以如果對延時有要求,則建議用下降沿輸出。
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,相當(dāng)于接地,與之并聯(lián)的回路“相當(dāng)于被一根導(dǎo)線短路”,所以外電路邏輯電平便為0,只有都為高電平時,與的結(jié)果才為邏輯1。

5.png

開漏復(fù)用功能:可以理解為GPIO口被用作第二功能時的配置情況(即并非作為通用IO口使用)。端口必須配置成復(fù)用功能輸出模式(推挽或開漏)

6.png

推挽式輸出:可以輸出高,低電平,連接數(shù)字器件;推挽結(jié)構(gòu)一般是指兩個三級管分別受到互補信號的控制,總是在一個三極管導(dǎo)通的時候另一個截止。高低電平由IC的電源低定。

推挽電路是兩個參數(shù)相同的三極管或MOSFET,以推挽方式存在于電路中,各負(fù)責(zé)正負(fù)半周的波形方法任務(wù),電路工作時,兩只對稱的功率開關(guān)管每次只有一個導(dǎo)通,所以導(dǎo)通損耗小,效率高。輸出即可以向負(fù)載灌電流。推拉式輸出級即提高電路的負(fù)載能力,又提高開關(guān)速度。

7.png

推挽式復(fù)用功能:可以理解為GPIO口被用作第二功能時的配置情況(并非作為通用IO口使用)

8.png

GPIO的主要寄存器

9.png

每個I/O端口位可以自由編程,然而I/O端口寄存器必須按32位字被訪問(不允許半字或字節(jié)訪問),**一些寄存器的使用功能可以通過立創(chuàng)商場查找相應(yīng)單片機芯片的數(shù)據(jù)手冊來查閱,然后進行相應(yīng)的端口配置,以達(dá)到IO口初始化的效果。**也可以通過以下鏈接來查看GPIO相關(guān)寄存器配置詳情。

GPIO相關(guān)寄存器

六、在stm32中選用io模式

(1) 浮空輸入_IN_FLOATING ——浮空輸入,可以做KEY識別,RX1

(2)帶上拉輸入_IPU——IO內(nèi)部上拉電阻輸入

(3)帶下拉輸入_IPD—— IO內(nèi)部下拉電阻輸入

(4)模擬輸入_AIN ——應(yīng)用ADC模擬輸入,或者低功耗下省電

(5)開漏輸出_OUT_OD ——IO輸出0接GND,IO輸出1,懸空,需要外接上拉電阻,才能實現(xiàn)輸出高電平。當(dāng)輸出為1時,IO口的狀態(tài)由上拉電阻拉高電平,但由于是開漏輸出模式,這樣IO口也就可以由外部電路改變?yōu)榈碗娖交虿蛔?。可以讀IO輸入電平變化,實現(xiàn)C51的IO雙向功能

(6)推挽輸出_OUT_PP ——IO輸出0-接GND, IO輸出1 -接VCC,讀輸入值是未知的

(7)復(fù)用功能的推挽輸出_AF_PP ——片內(nèi)外設(shè)功能(I2C的SCL,SDA)

(8)復(fù)用功能的開漏輸出_AF_OD ——片內(nèi)外設(shè)功能(TX1,MOSI,MISO.SCK.SS)

總結(jié):之前對于配置寄存器都是通過例程來進行配置的,當(dāng)自己實際來進行配置的時候還是有點困難,經(jīng)過多次練習(xí)后,自己掌握了一些寄存器的應(yīng)用場景之后,配置端口的速度也有所提升,也對之前不懂的地方有了新的理解,總的來說,成功沒有捷徑,還是要多練習(xí),多看stm32中的一些底層函數(shù),這樣才有更好的提升。好了,海翎光電的小編今日分享就到這里。

主站蜘蛛池模板: 午夜爱爱小视频 | 久久久精品在线观看 | 一二三四在线观看免费高清视频 | 毛片黄色视频 | 国产欧美视频综合二区 | 免费人成网站免费看视频 | av在线看网址 | 午夜国产福利视频 | 亚洲人成在线播放 | 农村黄a三级三级三级 | 国产精品手机在线观看 | 三级爱爱视频 | 国产三级毛片视频 | 国产在线观看一区二区三区 | 成年人网站在线免费观看 | 毛片在线观看网站 | 欧美一级日韩一级亚洲一级 | 国产aⅴ一区二区 | 国产欧美在线视频免费 | 国产吧在线视频 | 国产日韩精品一区二区在线观看播放 | 午夜视频入口 | 五月天性| 男人毛片| 高清一区二区三区视频 | 最近免费中文在线视频 | 午夜欧美福利 | 欧美日韩在线成人看片a | 亚洲毛片免费看 | 欧美日韩国产手机在线观看视频 | 在线视频一区二区三区三区不卡 | 国产精品久久久久久久hd | 亚洲图片 欧美 | 国产成人福利在线 | 在线一区二区观看 | 在线观看视频日韩 | 九九99香蕉在线视频免费 | 免费福利在线播放 | 香蕉资源 | 亚洲国产精品一区二区久久 | 午夜视频在线观看国产 |