關(guān)于ARM的GPIO口的四種方式解說
準(zhǔn)雙向I/O模式與標(biāo)準(zhǔn)80C51相比,雖然在內(nèi)部結(jié)構(gòu)上是不同的,但在用法上類同,比如要作為輸入時(shí)都必須先寫“1”置成高電平,然后才能去讀引腳的電平狀態(tài)。
本文引用地址:http://butianyuan.cn/article/201611/318957.htm推挽輸出的特點(diǎn)是不論輸出高電平還是低電平都能驅(qū)動(dòng)較大的電流,比如輸出高電平時(shí)可以直接點(diǎn)亮LED(要串聯(lián)幾百歐限流電阻),而在準(zhǔn)雙向I/O模式下很難辦到。
高阻輸入模式的特點(diǎn)是只能作為輸入使用,但是可以獲得比較高的輸入阻抗,這在模擬比較器和ADC應(yīng)用中是必需的。
開漏模式與準(zhǔn)雙向模式相似,但是沒有內(nèi)部上拉電阻。開漏模式的優(yōu)點(diǎn)是電氣兼容性好,外部上拉電阻接3V電源,就能和3V邏輯器件接口,如果上拉電阻接5V電源,又可以與5V邏輯器件接口。此外,開漏模式還可以方便地實(shí)現(xiàn)“線與”邏輯功能
1. 高阻輸入(Input)
為減少信息傳輸線的數(shù)目,大多數(shù)計(jì)算機(jī)中的信息傳輸線采用總線形式,即凡要傳輸?shù)耐愋畔⒍荚谕唤M傳輸線,且信息是分時(shí)傳送的。在計(jì)算機(jī)中一般有三組總線,即數(shù)據(jù)總線、地址總線和控制總線。為防止信息相互干擾,要求凡掛到總線上的寄存器或存儲(chǔ)器等,它的輸入輸出端不僅能呈現(xiàn)0、1兩個(gè)信息狀態(tài),而且還應(yīng)能呈現(xiàn)第三個(gè)狀態(tài)----高阻抗狀態(tài),即此時(shí)好像它們的輸出被開關(guān)斷開,對(duì)總線狀態(tài)不起作用,此時(shí)總線可由其他器件占用。三態(tài)緩沖器即可實(shí)現(xiàn)上述功能,它除具有輸入輸出端之外,還有一控制端。
如圖1.1所示,為GPIO管腳在高阻輸入模式下的等效結(jié)構(gòu)示意圖。這是一個(gè)管腳的情況,其它管腳的結(jié)構(gòu)也是同樣的。輸入模式的結(jié)構(gòu)比較簡(jiǎn)單,就是一個(gè)帶有施密特觸發(fā)輸入(Schmitt-triggered input)的三態(tài)緩沖器(U1),并具有很高的輸入等效阻抗。施密特觸發(fā)輸入的作用是能將緩慢變化的或者是畸變的輸入脈沖信號(hào)整形成比較理想的矩形脈沖信號(hào)。執(zhí)行GPIO管腳讀操作時(shí),在讀脈沖(Read Pulse)的作用下會(huì)把管腳(Pin)的當(dāng)前電平狀態(tài)讀到內(nèi)部總線上(Internal Bus)。在不執(zhí)行讀操作時(shí),外部管腳與內(nèi)部總線之間是隔離的
2. 推挽輸出(Output)
推挽輸出原理:在功率放大器電路中大量采用推挽放大器電路,這種電路中用兩只三極管構(gòu)成一級(jí)放大器電路,兩只三極管分別放大輸入信號(hào)的正半周和負(fù)半周,即用一只三極管放大信號(hào)的正半周,用另一只三極管放大信號(hào)的負(fù)半周,兩只三極管輸出的半周信號(hào)在放大器負(fù)載上合并后得到一個(gè)完整周期的輸出信號(hào)。
推挽放大器電路中,一只三極管工作在導(dǎo)通、放大狀態(tài)時(shí),另一只三極管處于截止?fàn)顟B(tài),當(dāng)輸入信號(hào)變化到另一個(gè)半周后,原先導(dǎo)通、放大的三極管進(jìn)入截止,而原先截止的三極管進(jìn)入導(dǎo)通、放大狀態(tài),兩只三極管在不斷地交替導(dǎo)通放大和截止變化,所以稱為推挽放大器(armjishu.com)。
如圖1.2所示,為GPIO管腳在推挽輸出模式下的等效結(jié)構(gòu)示意圖。U1是輸出鎖存器,執(zhí)行GPIO管腳寫操作時(shí),在寫脈沖(Write Pulse)的作用下,數(shù)據(jù)被鎖存到Q和/Q。T1和T2構(gòu)成CMOS反相器,T1導(dǎo)通或T2導(dǎo)通時(shí)都表現(xiàn)出較低的阻抗,但T1和T2不會(huì)同時(shí)導(dǎo)通或同時(shí)關(guān)閉,最后形成的是推挽輸出。在推挽輸出模式下,GPIO還具有回讀功能,實(shí)現(xiàn)回讀功能的是一個(gè)簡(jiǎn)單的三態(tài)門U2。注意:執(zhí)行回讀功能時(shí),讀到的是管腳的輸出鎖存狀態(tài),而不是外部管腳Pin的狀態(tài)。
3. 開漏輸出(OutputOD)
如圖1.3所示,為GPIO管腳在開漏輸出模式下的等效結(jié)構(gòu)示意圖。開漏輸出和推挽輸出相比結(jié)構(gòu)基本相同,但只有下拉晶體管T1而沒有上拉晶體管。同樣,T1實(shí)際上也是多組可編程選擇的晶體管。開漏輸出的實(shí)際作用就是一個(gè)開關(guān),輸出“1”時(shí)斷開、輸出“0”時(shí)連接到GND(有一定內(nèi)阻)?;刈x功能:讀到的仍是輸出鎖存器的狀態(tài),而不是外部管腳Pin的狀態(tài)。因此開漏輸出模式是不能用來輸入的。
開漏輸出結(jié)構(gòu)沒有內(nèi)部上拉,因此在實(shí)際應(yīng)用時(shí)通常都要外接合適的上拉電阻(通常采用4.7~10kΩ)。開漏輸出能夠方便地實(shí)現(xiàn)“線與”邏輯功能,即多個(gè)開漏的管腳可以直接并在一起(不需要緩沖隔離)使用,并統(tǒng)一外接一個(gè)合適的上拉電阻,就自然形成“邏輯與”關(guān)系。開漏輸出的另一種用途是能夠方便地實(shí)現(xiàn)不同邏輯電平之間的轉(zhuǎn)換(如3.3V到5V之間),只需外接一個(gè)上拉電阻,而不需要額外的轉(zhuǎn)換電路。典型的應(yīng)用例子就是基于開漏電氣連接的I2C總線。
4. 鉗位二極管
GPIO內(nèi)部具有鉗位保護(hù)二極管,如圖1.4所示。其作用是防止從外部管腳Pin輸入的電壓過高或者過低。VDD正常供電是3.3V,如果從Pin輸入的信號(hào)(假設(shè)任何輸入信號(hào)都有一定的內(nèi)阻)電壓超過VDD加上二極管D1的導(dǎo)通壓降(假定在0.6V左右),則二極管D1導(dǎo)通,會(huì)把多于的電流引到 VDD,而真正輸入到內(nèi)部的信號(hào)電壓不會(huì)超過3.9V。同理,如果從Pin輸入的信號(hào)電壓比GND還低,則由于二極管D2的作用,會(huì)把實(shí)際輸入內(nèi)部的信號(hào)電壓鉗制在-0.6V左右。
假設(shè)VDD=3.3V,GPIO設(shè)置在開漏模式下,外接10kΩ上拉電阻連接到5V電源,在輸出“1”時(shí),我們通過測(cè)量發(fā)現(xiàn):GPIO管腳上的電壓并不會(huì)達(dá)到5V,而是在4V上下,這正是內(nèi)部鉗位二極管在起作用。雖然輸出電壓達(dá)不到滿幅的5V,但對(duì)于實(shí)際的數(shù)字邏輯通常3.5V以上就算是高電平了 (armjishu.com)。
如果確實(shí)想進(jìn)一步提高輸出電壓,一種簡(jiǎn)單的做法是先在GPIO管腳上串聯(lián)一只二極管(如1N4148),然后再接上拉電阻。參見圖1.5,框內(nèi)是芯片內(nèi)部電路。向管腳寫“1”時(shí),T1關(guān)閉,在Pin處得到的電壓是3.3+VD1+VD3=4.5V,電壓提升效果明顯;向管腳寫“0”時(shí),T1導(dǎo)通,在 Pin處得到的電壓是VD3=0.6V,仍屬低電平。
評(píng)論