對通用輸入輸出GPIO的深入理解

來源:互聯網
上載者:User

一.GPIO簡介

    
   I/O(Input/Output)介面是一顆微控制器必須具備的最基本外設功能。通常在ARM裡,所有I/O都是通用的,稱為
GPIO(General Purpose
Input/Output)。每個GPIO連接埠包含8個管腳,如PA連接埠是PA0~PA7。GPIO模組支援多個可程式化輸入/輸出管腳(具體取決於與
GPIO複用的外設的使用方式)。GPIO模組包含以下特性:
 1)可程式化控制GPIO中斷
     ---屏蔽中斷髮生
     ---邊沿觸發(上升沿、下降沿、雙邊沿)
     ---電平觸發(高電平、低電平)
 2)輸入/輸出可承受5V
 3)在讀和寫操作中通過地址線進行位屏蔽
 4)可程式化控制GPIO管腳配置:
     ---弱上拉或弱下拉電阻
     ---2mA、4mA、8mA驅動,以及帶驅動轉換速率(Slew Rate)控制的8mA驅動
     ---開漏使能
     ---數字輸入使能

二.GPIO的各種模式

   GPIO管腳可以被配置為多種工作模式,其中有3種比較常用:高阻輸入、推挽輸出、開漏輸出

1. 高阻輸入(Input)



圖1.1 GPIO高阻輸入模式結構


 
    
為減少資訊傳輸線的數目,大多數電腦中的資訊傳輸線採用匯流排形式,即凡要傳輸的同類資訊都在同一組傳輸線,且資訊是分時傳送的。在電腦中一般有三組總
線,即資料匯流排、地址匯流排和控制匯流排。為防止資訊相互幹擾,要求凡掛到匯流排上的寄存器或儲存空間等,它的輸入輸出端不僅能呈現0、1兩個資訊狀態,而且還應
能呈現第三個狀態----高阻抗狀態,即此時好像它們的輸出被開關斷開,對匯流排狀態不起作用,此時匯流排可由其他器件佔用。三態緩衝器即可實現上述功能,它
除具有輸入輸出端之外,還有一控制端。

      
1.1所示,為GPIO管腳在高阻輸入模式下的等效結構。這是一個管腳的情況,其它管腳的結構也是同樣的。輸入模式的結構比較簡單,就是一個帶
有施密特觸發輸入(Schmitt-triggered
input)的三態緩衝器(U1),並具有很高的輸入等效阻抗。施密特觸發輸入的作用是能將緩慢變化的或者是畸變的輸入脈衝訊號整形成比較理想的矩形脈衝
訊號。執行GPIO管腳讀操作時,在讀脈衝(Read Pulse)的作用下會把管腳(Pin)的當前電平狀態讀到內部匯流排上(Internal
Bus)。在不執行讀操作時,外部管腳與內部匯流排之間是隔離的。

2. 推挽輸出(Output)



圖1.2 GPIO推挽輸出模式結構


 
     
   推挽輸出原理:在功率放大器電路中大量採用推挽放大器電路,這種電路中用兩隻三極體構成一級放大器電路,兩隻三極體分別放大輸入訊號的正半周和負半
周,即用一隻三極體放大訊號的正半周,用另一隻三極體放大訊號的負半周,兩隻三極體輸出的半周訊號在放大器負載上合并後得到一個完整周期的輸出訊號。

 
    
推挽放大器電路中,一隻三極體工作在導通、放大狀態時,另一隻三極體處於截止狀態,當輸入訊號變化到另一個半周后,原先導通、放大的三極體進入截止,而原
先截止的三極體進入導通、放大狀態,兩隻三極體在不斷地交替導通放大和截止變化,所以稱為推挽放大器(armjishu.com)。

 
      1.2所示,為GPIO管腳在推挽輸出模式下的等效結構。U1是輸出鎖存器,執行GPIO管腳寫操作時,在寫脈衝(Write
Pulse)的作用下,資料被鎖存到Q和/Q。T1和T2構成CMOS反相器,T1導通或T2導通時都表現出較低的阻抗,但T1和T2不會同時導通或同時
關閉,最後形成的是推挽輸出。在推挽輸出模式下,GPIO還具有回讀功能,實現回讀功能的是一個簡單的三態門U2。注意:執行回讀功能時,讀到的是管腳的
輸出鎖存狀態,而不是外部管腳Pin的狀態。

3. 開漏輸出(OutputOD)



圖1.3 GPIO開漏輸出結構


 
        
 1.3所示,為GPIO管腳在開漏輸出模式下的等效結構。開漏輸出和推挽輸出相比結構基本相同,但只有下拉晶體管T1而沒有上拉晶體管。同
樣,T1實際上也是多組可程式化選擇的晶體管。開漏輸出的實際作用就是一個開關,輸出“1”時斷開、輸出“0”時串連到GND(有一定內阻)。回讀功能:讀
到的仍是輸出鎖存器的狀態,而不是外部管腳Pin的狀態。因此開漏輸出模式是不能用來輸入的。

    
   開漏輸出結構沒有內部上拉,因此在實際應用時通常都要外接合適的上拉電阻(通常採用4.7~10kΩ)。開漏輸出能夠方便地實現“線與”邏輯功能,
即多個開漏的管腳可以直接並在一起(不需要緩衝隔離)使用,並統一外接一個合適的上拉電阻,就自然形成“邏輯與”關係。開漏輸出的另一種用途是能夠方便地
實現不同邏輯電平之間的轉換(如3.3V到5V之間),只需外接一個上拉電阻,而不需要額外的轉換電路。典型的應用例子就是基於開漏電氣串連的I2C總
線。

4. 鉗位二極體

    
   GPIO內部具有鉗位保護二極體,1.4所示。其作用是防止從外部管腳Pin輸入的電壓過高或者過低。VDD正常供電是3.3V,如果從Pin
輸入的訊號(假設任何輸入訊號都有一定的內阻)電壓超過VDD加上二極體D1的導通壓降(假定在0.6V左右),則二極體D1導通,會把多於的電流引到
VDD,而真正輸入到內部的訊號電壓不會超過3.9V。同理,如果從Pin輸入的訊號電壓比GND還低,則由於二極體D2的作用,會把實際輸入內部的訊號
電壓鉗制在-0.6V左右。



圖1.4 GPIO鉗位二極體


 
  
   假設VDD=3.3V,GPIO設定在開漏模式下,外接10kΩ上拉電阻串連到5V電源,在輸出“1”時,我們通過測量發現:GPIO管腳上的電壓
並不會達到5V,而是在4V上下,這正是內部鉗位二極體在起作用。雖然輸出電壓達不到滿幅的5V,但對於實際的數字邏輯通常3.5V以上就算是高電平了
(armjishu.com)。



圖1.5 解決開漏模式上拉電壓不足的方法


 
  
   如果確實想進一步提高輸出電壓,一種簡單的做法是先在GPIO管腳上串聯一隻二極體(如1N4148),然後再接上拉電阻。參見圖1.5,框內是芯
片內部電路。向管腳寫“1”時,T1關閉,在Pin處得到的電壓是3.3+VD1+VD3=4.5V,電壓提升效果明顯;向管腳寫“0”時,T1導通,在
Pin處得到的電壓是VD3=0.6V,仍屬低電平。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.