網(wǎng)頁版1688免費(fèi)網(wǎng)站做seo
一,GPIO內(nèi)部結(jié)構(gòu)
1,保護(hù)二極管
* 引腳內(nèi)部加上這兩個(gè)保護(hù)二級(jí)管可以防止引腳外部過高或過低的電壓輸入。
* 當(dāng)引腳電壓高于 VDD_FT 或 VDD 時(shí),上方的二極管導(dǎo)通吸收這個(gè)高電壓。
* 當(dāng)引腳電壓低于 VSS 時(shí),下方的二極管導(dǎo)通,防止不正常電壓引入芯片導(dǎo)致芯片燒毀。
2,上下拉電阻
* 上拉和下拉電阻上都有一個(gè)開關(guān),通過配置上下拉電阻開關(guān),可以控制引腳的默認(rèn)狀態(tài)電平。
* 當(dāng)開啟上拉時(shí)引腳默認(rèn)電壓為高電平,
* 開啟下拉時(shí),引腳默認(rèn)電壓為低電平,這樣就可以消除引腳不定狀態(tài)的影響。
* 將上拉和下拉的開關(guān)都關(guān)斷,這種狀態(tài)我們稱為浮空模式,一旦配置成這個(gè)模式,引腳的電壓是不確定的,如果用萬用表測量此模式下管腳電壓時(shí)會(huì)發(fā)現(xiàn)只有 1 點(diǎn)幾伏,而且還不時(shí)改變,所以一般情況下我們都會(huì)給引腳設(shè)置成上拉或者下拉模式,使它有一個(gè)默認(rèn)狀態(tài)。
* STM32 上下拉及浮空模式的配置是通過GPIOx_CRL 和 GPIOx_CRH 寄存器控制的。
* STM32 內(nèi)部的上拉其實(shí)是一個(gè)弱上拉,也就是說通過此上拉電阻輸出的電流很小,如果想要輸出一個(gè)大電流,那么就需要外接上拉電阻了。
3,P-MOS?和 N-MOS
* GPIO 引腳經(jīng)過兩個(gè)保護(hù)二極管后就分成兩路,
* 上面一路是“輸入模式”,下面一路是“輸出模式”。
* 輸出模式,線路經(jīng)過一個(gè)由 P-MOS 和 N-MOS管組成的單元電路,這讓 GPIO 引腳具有了推挽和開漏兩種輸出模式。
* 推挽輸出模式,是根據(jù) P-MOS 和 N-MOS 管的工作方式命名的。
* 在該結(jié)構(gòu)單元輸入一個(gè)高電平時(shí),P-MOS 管導(dǎo)通,N-MOS 管截止,對(duì)外輸出高電平(3.3V)。
* 在該單元輸入一個(gè)低電平時(shí),P-MOS 管截止,N-MOS 管導(dǎo)通,對(duì)外輸出低電平(0V)。
* 如果當(dāng)切換輸入高低電平時(shí),兩個(gè) MOS 管將輪流導(dǎo)通,一個(gè)負(fù)責(zé)灌電流(電流輸出到負(fù)載),一個(gè)負(fù)責(zé)拉電流(負(fù)載電流流向芯片),使其負(fù)載能力和開關(guān)速度都比普通的方式有很大的提高。下圖為推挽輸出模式的等效電路。
* 在開漏輸出模式時(shí),不論輸入是高電平還是低電平,P-MOS 管總處于關(guān)閉狀態(tài)。
* 當(dāng)給這個(gè)單元電路輸入低電平時(shí),N-MOS 管導(dǎo)通,輸出即為低電平。
* 當(dāng)輸入高電平時(shí),N-MOS 管截止,這個(gè)時(shí)候引腳狀態(tài)既不是高電平,又不是低電平,我們稱之為高阻態(tài)。
* 如果想讓引腳輸出高電平,那么引腳必須外接一個(gè)上拉電阻,由上拉電阻提供高電平。開漏輸出模式等效電路圖如下圖所示。
* 在開漏輸出模式中還有一個(gè)特點(diǎn),引腳具有“線與”關(guān)系。即多個(gè)開漏輸出模式的引腳接在一起,只要有一個(gè)引腳為低電平,其他所有管腳都為低電平,即把所有引腳連接在一起的這條總線拉低了。
* 只有當(dāng)所有引腳輸出高阻態(tài)時(shí)這條總線的電平才由上拉電阻的 VDD 決定。如果 VDD 連接的是 3.3V,那么引腳輸出的就是 3.3V,如果 VDD 連接的是 5V,那么引腳輸出的就是 5V。因此如果想要讓 STM32 管腳輸出 5V,可以選擇開漏輸出模式,然后在外接上拉電阻的電源 VDD 選擇 5V 即可,前提是這個(gè) 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)電路的輸入信號(hào),是由 GPIO“輸出數(shù)據(jù)寄存器GPIOx_ODR”提供的,因此我們通過修改輸出數(shù)據(jù)寄存器的值就可以修改 GPIO 引腳的輸出電平。而“置位/復(fù)位寄存器 GPIOx_BSRR”可以通過修改輸出數(shù)據(jù)寄存器的值從而影響電路的輸出。
5,
復(fù)用功能輸出由于STM32 的 GPIO 引腳具有第二功能,因此當(dāng)使用復(fù)用功能的時(shí)候,也就是通過其他外設(shè)復(fù)用功能輸出信號(hào)與 GPIO 數(shù)據(jù)寄存器一起連接到雙 MOS 管電路的輸入,其中梯形結(jié)構(gòu)是用來選擇使用復(fù)用功能還是普通 IO 口功能。例如我們使用 USART 串口通訊時(shí),需要用到某個(gè) GPIO 引腳作為通訊發(fā)送引腳,這個(gè)時(shí)候就可以把該 GPIO 引腳配置成 USART 串口復(fù)用功能,由串口外設(shè)控制該引腳,發(fā)送數(shù)據(jù)。
6,
輸入數(shù)據(jù)寄存器輸入數(shù)據(jù)寄存器是由 IO 口經(jīng)過上下拉電阻、施密特觸發(fā)器引入。當(dāng)信號(hào)經(jīng)過觸發(fā)器,模擬信號(hào)將變?yōu)閿?shù)字信號(hào) 0 或 1,然后存儲(chǔ)在輸入數(shù)據(jù)寄存器中,通過讀取輸入數(shù)據(jù)寄存器 GPIOx_IDR 就可以知道 IO 口的電平狀態(tài)。
7,
復(fù)用功能輸入此模式與復(fù)用功能輸出類似。在復(fù)用功能輸入模式時(shí),GPIO 引腳的信號(hào)傳輸?shù)?STM32 其他片上外設(shè),由該外設(shè)讀取引腳的狀態(tài)。同樣,如我們使用 USART 串口通訊時(shí),需要用到某個(gè) GPIO 引腳作為通訊接收引腳,這個(gè)時(shí)候就可以把該 GPIO 引腳配置成 USART 串口復(fù)用功能,使 USART 可以通過該通訊引腳的接收遠(yuǎn)端數(shù)據(jù)。
8,
模擬輸入輸出當(dāng) GPIO 引腳用于ADC 采集電壓的輸入通道時(shí),用作“模擬輸入”功能,此時(shí)信號(hào)是不經(jīng)過施密特觸發(fā)器的,因?yàn)榻?jīng)過施密特觸發(fā)器后信號(hào)只有 0、1 兩種狀態(tài),ADC 外設(shè)要采集到原始的模擬信號(hào),信號(hào)源輸入必須在施密特觸發(fā)器之前。類似地,當(dāng) GPIO 引腳用于 DAC 作為模擬電壓輸出通道時(shí),此時(shí)作為“模擬輸出”功能, DAC 的模擬信號(hào)輸出就不經(jīng)過雙 MOS 管結(jié)構(gòu)了,模擬信號(hào)直接通過管腳輸出。
二,GPIO的8種模式,四種輸入模式,四種輸出模式
1,輸入模式:
輸入浮空
輸入上拉
輸入下拉
模擬輸入
2,輸出模式
開漏輸出
推挽輸出
復(fù)用模式 -?開漏
復(fù)用模式 -?推挽
三,GPIO 8種模式含義
1,輸入浮空
浮空就是邏輯器件與引腳即不接高電平,也不接低電平。由于邏輯器件的內(nèi)部結(jié)構(gòu),當(dāng)它輸入引腳懸空時(shí),相當(dāng)于該引腳接了高電平。一般實(shí)際運(yùn)用時(shí),引腳不建議懸空,易受干擾。通俗講就是浮空就是浮在空中,就相當(dāng)于此端口在默認(rèn)情況下什么都不接,呈高阻態(tài),這種設(shè)置在數(shù)據(jù)傳輸時(shí)用的比較多。浮空最大的特點(diǎn)就是電壓的不確定性,它可能是0V,頁可能是VCC,還可能是介于兩者之間的某個(gè)值(最有可能) 浮空一般用來做ADC輸入用,這樣可以減少上下拉電阻對(duì)結(jié)果的影響。
2,輸入上拉模式
上拉就是把電位拉高,比如拉到Vcc。上拉就是將不確定的信號(hào)通過一個(gè)電阻鉗位在高電平。電阻同時(shí)起到限流的作用。弱強(qiáng)只是上拉電阻的阻值不同,沒有什么嚴(yán)格區(qū)分。
3,輸入下拉
就是把電壓拉低,拉到GND。與上拉原理相似。
4,模擬輸入
模擬輸入是指傳統(tǒng)方式的輸入,數(shù)字輸入是輸入PCM數(shù)字信號(hào),即0,1的二進(jìn)制數(shù)字信號(hào),通過數(shù)模轉(zhuǎn)換,轉(zhuǎn)換成模擬信號(hào),經(jīng)前級(jí)放大進(jìn)入功率放大器,功率放大器還是模擬的。
5,開漏輸出
輸出端相當(dāng)于三極管的集電極,要得到高電平狀態(tài)需要上拉電阻才行,適合于做電流型的驅(qū)動(dòng),其吸收電流的能力相對(duì)強(qiáng)(一般20mA以內(nèi))。
開漏形式的電路有以下幾個(gè)特點(diǎn):
1)利用外部電路的驅(qū)動(dòng)能力,減少IC內(nèi)部的驅(qū)動(dòng)。當(dāng)IC內(nèi)部MOSFET導(dǎo)通時(shí),驅(qū)動(dòng)電流是從外部的VCC流經(jīng)R pull-up ,MOSFET到GND。IC內(nèi)部僅需很下的柵極驅(qū)動(dòng)電流。
2) 一般來說,開漏是用來連接不同電平的器件,匹配電平用的,因?yàn)殚_漏引腳不連接外部的上拉電阻時(shí),只能輸出低電平,如果需要同時(shí)具備輸出高電平的功能,則需要接上拉電阻,很好的一個(gè)優(yōu)點(diǎn)是通過改變上拉電源的電壓,便可以改變傳輸電平。比如加上上拉電阻就可以提供TTL/CMOS電平輸出等。(上拉電阻的阻 決定了邏輯電平轉(zhuǎn)換的沿的速度 。阻 越大,速度越低功耗越小,所以負(fù)載電阻的選擇要兼顧功耗和速度。
3)OPEN-DRAIN提供了靈活的輸出方式,但是也有其弱點(diǎn),就是帶來上升沿的延時(shí)。因?yàn)樯仙厥峭ㄟ^外接上拉無源電阻對(duì)負(fù)載充電,所以當(dāng)電阻選擇小時(shí)延時(shí)就小,但功耗大;反之延時(shí)大功耗小。所以如果對(duì)延時(shí)有要求,則建議用下降沿輸出。
4)可以將多個(gè)開漏輸出的Pin,連接到一條線上。通過一只上拉電阻,在不增加任何器件的情況下,形成“與邏輯”關(guān)系。這也是I2C,SMBus等總線判斷總線占用狀態(tài)的原理。 在一個(gè)結(jié)點(diǎn)(線)上, 連接一個(gè)上拉電阻到電源 VCC 或 VDD 和 n 個(gè) NPN 或 NMOS 晶體管的集電極 C 或漏極 D, 這些晶體管的發(fā)射極 E 或源極 S 都接到地線上, 只要有一個(gè)晶體管飽和, 這個(gè)結(jié)點(diǎn)(線)就被拉到地線電平上. 因?yàn)檫@些晶體管的基極注入電流(NPN)或柵極加上高電平(NMOS),晶體管就會(huì)飽和, 所以這些基極或柵極對(duì)這個(gè)結(jié)點(diǎn)(線)的關(guān)系是或非 NOR 邏輯. 如果這個(gè)結(jié)點(diǎn)后面加一個(gè)反相器, 就是或 OR 邏輯. 其實(shí)可以簡單的理解為:在所有引腳連在一起時(shí),外接一上拉電阻,如果有一個(gè)引腳輸出為邏輯0,相當(dāng)于接地,與之并聯(lián)的回路“相當(dāng)于被一根導(dǎo)線短路”,所以外電路邏輯電平便為0,只有都為高電平時(shí),與的結(jié)果才為邏輯1。
6,開漏復(fù)用功能
可以理解為GPIO口被用作第二功能時(shí)的配置情況(即并非作為通用IO口使用)。端口必須配置成復(fù)用功能輸出模式(推挽或開漏)
7,推挽式輸出
可以輸出高,低電平,連接數(shù)字器件;推挽結(jié)構(gòu)一般是指兩個(gè)三級(jí)管分別受到互補(bǔ)信號(hào)的控制,總是在一個(gè)三極管導(dǎo)通的時(shí)候另一個(gè)截止。高低電平由IC的電源低定。
推挽電路是兩個(gè)參數(shù)相同的三極管或MOSFET,以推挽方式存在于電路中,各負(fù)責(zé)正負(fù)半周的波形方法任務(wù),電路工作時(shí),兩只對(duì)稱的功率開關(guān)管每次只有一個(gè)導(dǎo)通,所以導(dǎo)通損耗小,效率高。輸出即可以向負(fù)載灌電流。推拉式輸出級(jí)即提高電路的負(fù)載能力,又提高開關(guān)速度。
8,推挽式復(fù)用功能
可以理解為GPIO口被用作第二功能時(shí)的配置情況(并非作為通用IO口使用)
四,上拉電阻,拉電流
1,
電阻的一端連接VCC電源,一端連接IO口(或GPIO口),讓IO口的電平保持在高電平,這個(gè)電阻稱為上拉電阻。
2,上拉電阻的分類和區(qū)別
在單片機(jī)電路中,上拉電阻可以分為:IO內(nèi)部上拉電阻 和外部上拉電阻。
IO口內(nèi)部上拉電阻:單片機(jī)內(nèi)部集成,阻值不可更改。
外部上拉電阻:由硬件工程師設(shè)計(jì),阻值可以按照電路的需求來設(shè)計(jì),阻值可以更改。
大多數(shù)單片機(jī)的IO內(nèi)部都會(huì)集成上拉電阻,在產(chǎn)品設(shè)計(jì)中,我們也會(huì)盡可能的選擇單片機(jī)的內(nèi)部上拉電阻,這樣可以減少單片機(jī)外部元器件的數(shù)量,降低成本等。 如果內(nèi)部上拉電阻不能滿足需求的時(shí)候,我們就需要在IO的外部設(shè)計(jì)外部上拉電阻。
3,單片機(jī)IO內(nèi)部配置了上拉電阻,外部硬件設(shè)計(jì)也加了上拉電阻,有什么影響?
如上圖:內(nèi)部上拉電阻是R1,外部R2是外部上拉電阻,對(duì)產(chǎn)品的功能,一般情況下,基本上沒有影響。 影響的這個(gè)IO口的上拉電阻的阻值, 上圖的上拉電阻的阻值,是R1 和R2并聯(lián)之后的電阻值。
4,IO拉電流介紹
上拉電阻的阻值的大小,對(duì)IO口的功能有什么影響? 不同的阻值,對(duì)影響IO的拉電流大小。
* 拉電流的概念:
高電平輸出時(shí),一般是輸出端對(duì)負(fù)載提供電流,其提供電流的數(shù)值叫做拉電流。
如下圖的電流I,稱為單片機(jī)IO口的拉電流。( RL代表負(fù)載)
* 拉電流的大小對(duì)電路的影響:
如下圖,電流I越大,LED燈的亮度越高,越小,LED燈亮度越低;
五,下拉電阻 -?灌電流
1,電阻的一端連接GND,一端連接IO口,將IO口不確定的狀態(tài)保持在低電平,這個(gè)電阻稱為下拉電阻。
2,下拉電阻的分類和區(qū)別:
在單片機(jī)電路中,下拉電阻可以分為:IO內(nèi)部下拉電阻 和外部下拉電阻。
IO口內(nèi)部下拉電阻:單片機(jī)內(nèi)部集成,阻值不可更改。
外部下拉電阻:由硬件工程師設(shè)計(jì),阻值可以按照電路的需求來設(shè)計(jì),阻值可以更改。
有些單片機(jī)的IO內(nèi)部是沒有集成下拉電阻(STM32內(nèi)部有下拉電阻,STC15沒有),所以在產(chǎn)品設(shè)計(jì)中,如果有下拉電阻的需求,我們需要在IO口外部設(shè)計(jì)外部下拉電阻。
3,IO的灌電流的介紹
下拉電阻的阻值的大小,對(duì)IO口的功能有什么影響? 不同的阻值,會(huì)影響IO的灌電流
灌電流的概念:低電平輸出時(shí),一般是輸出端要吸收負(fù)載的電流,其吸收電流的數(shù)值叫做灌電流
如下圖的電流I,稱為IO口的灌電流。( RL代表負(fù)載)
4,單片機(jī)電路中,IO口對(duì)灌電流的要求:
單片機(jī)電路設(shè)計(jì)中,對(duì)IO口的灌電流是有要求的,以STC15單片機(jī)為例,如下圖,每個(gè)IO口的灌電流最大不能超過20mA;??對(duì)單片機(jī)整體來說,灌電流+拉電流 不能超過90mA
參考文檔:
GPIO基本知識(shí) - 知乎
GPIO內(nèi)部結(jié)構(gòu)、工作原理、高電平、低電平、上拉電阻、下拉電阻詳解 – 無際單片機(jī)