關於ARM的GPIO口的四種方式解說

2020-11-26 電子產品世界

從I/O口的特性上看,標準80C51的P0口在作為I/O口使用時,是開漏結構,在實際應用中通常要添加上拉電阻;P1、P2、P3都是準雙向I /O,內部有上拉電阻,既可作為輸入又可以作為輸出。而LPC900系列單片機的I/O口特性有一定的不同,它們可以被配置成4種不同的工作模式:準雙向 I/O、推輓輸出、高阻輸入、開漏。

準雙向I/O模式與標準80C51相比,雖然在內部結構上是不同的,但在用法上類同,比如要作為輸入時都必須先寫「1」置成高電平,然後才能去讀引腳的電平狀態。

本文引用地址:http://www.eepw.com.cn/article/201611/318957.htm

推輓輸出的特點是不論輸出高電平還是低電平都能驅動較大的電流,比如輸出高電平時可以直接點亮LED(要串聯幾百歐限流電阻),而在準雙向I/O模式下很難辦到。

高阻輸入模式的特點是只能作為輸入使用,但是可以獲得比較高的輸入阻抗,這在模擬比較器和ADC應用中是必需的。

開漏模式與準雙向模式相似,但是沒有內部上拉電阻。開漏模式的優點是電氣兼容性好,外部上拉電阻接3V電源,就能和3V邏輯器件接口,如果上拉電阻接5V電源,又可以與5V邏輯器件接口。此外,開漏模式還可以方便地實現「線與」邏輯功能

1. 高阻輸入(Input)

為減少信息傳輸線的數目,大多數計算機中的信息傳輸線採用總線形式,即凡要傳輸的同類信息都在同一組傳輸線,且信息是分時傳送的。在計算機中一般有三組總線,即數據總線、地址總線和控制總線。為防止信息相互幹擾,要求凡掛到總線上的寄存器或存儲器等,它的輸入輸出端不僅能呈現0、1兩個信息狀態,而且還應能呈現第三個狀態----高阻抗狀態,即此時好像它們的輸出被開關斷開,對總線狀態不起作用,此時總線可由其他器件佔用。三態緩衝器即可實現上述功能,它除具有輸入輸出端之外,還有一控制端。
如圖1.1所示,為GPIO管腳在高阻輸入模式下的等效結構示意圖。這是一個管腳的情況,其它管腳的結構也是同樣的。輸入模式的結構比較簡單,就是一個帶有施密特觸發輸入(Schmitt-triggered input)的三態緩衝器(U1),並具有很高的輸入等效阻抗。施密特觸發輸入的作用是能將緩慢變化的或者是畸變的輸入脈衝信號整形成比較理想的矩形脈衝信號。執行GPIO管腳讀操作時,在讀脈衝(Read Pulse)的作用下會把管腳(Pin)的當前電平狀態讀到內部總線上(Internal Bus)。在不執行讀操作時,外部管腳與內部總線之間是隔離的

2. 推輓輸出(Output)

推輓輸出原理:在功率放大器電路中大量採用推挽放大器電路,這種電路中用兩隻三極體構成一級放大器電路,兩隻三極體分別放大輸入信號的正半周和負半周,即用一隻三極體放大信號的正半周,用另一隻三極體放大信號的負半周,兩隻三極體輸出的半周信號在放大器負載上合併後得到一個完整周期的輸出信號。
推挽放大器電路中,一隻三極體工作在導通、放大狀態時,另一隻三極體處於截止狀態,當輸入信號變化到另一個半周后,原先導通、放大的三極體進入截止,而原先截止的三極體進入導通、放大狀態,兩隻三極體在不斷地交替導通放大和截止變化,所以稱為推挽放大器(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管腳在開漏輸出模式下的等效結構示意圖。開漏輸出和推輓輸出相比結構基本相同,但只有下拉電晶體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左右。

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

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


相關焦點

  • ARM學習筆記--GPIO接口
    char 1位元組;short 2位元組#define GPBDAT (*volatile unsigned long *)0x56000014)#define GPB5_out (1<GPBCON = GPB5_out;GPBDAT &= ~(1<<5);1.2.2 以總線方式訪問硬體
  • MIO與EMIO的關係解析 GPIO、MIO、EMIO的區別
    晶片型號:XC7Z010-1CLG400C Vivado版本:2016.1 點亮流水燈,共使用了三種方式: (1)PS通過MIO點亮PS端LED (2)PS通過EMIO點亮PL端LED (3)PS通過AXI點亮PL端LED。
  • stm32單片機中使用GPIO口模擬PWM輸出解析
    gpio   General Purpose Input Output (通用輸入/輸出)簡稱為GPIO,或總線擴展器,人們利用工業標準I2C、SMBus或SPI接口簡化了I/O口的擴展。當微控制器或晶片組沒有足夠的I/O埠,或當系統需要採用遠端串行通信或控制時,GPIO產品能夠提供額外的控制和監視功能。
  • ARM指令學習筆記
    還可以看到我們在arm指令中只需加個"!"就可以決定中間值是否保留。更加方便的是我們可以自由選擇變址前後指針的變化,例如塊拷貝尋址中就有四種:STMIA,STMIB,STMDA,STMDB.連遞減還是遞增,先變址還是先複製,Arm都給你預先設計好了,不能不說它周全,這些都是80x86裡沒有的,極大地方便了程式設計師的程序設計。
  • 嵌入式Linux設備驅動開發之:GPIO驅動程序實例
    圖11.4LED(左)和蜂鳴器(右)的驅動電路原理圖在圖11.4中,可知使用S3C2410處理器的通用I/O口GPF4、GPF5、GPF6和GPF7分別直接驅動LEDD12、D11、D10以及D9,而使用GPB0埠驅動蜂鳴器。4個LED分別在對應埠(GPF4~GPF7)為低電平時發亮,而蜂鳴器在GPB0為高電平時發聲。
  • 關於arm時鐘頻率的設置及編程
    它支持突發數據傳輸方式及單個數據傳輸方式,所有時序參考同一個時鐘沿;(2)ASB(Advanced System Bus):用於連接高性能系統模塊,它支持突發數據傳輸模式;(3)APB(Advance Peripheral Bus):是一個簡單接口支持低性能的外圍接口。
  • STM32教程(五)HAL庫之GPIO函數及實例詳細介紹!
    今天介紹STM32 HAL庫的GPIO函數庫,首先打開stm32f4xx_hal_gpio.h文件,我們能看到一些結構體定義以及GPIO引腳的地址定義等等,這些都很好理解,我們需要重點看HAL庫中GPIO的函數庫有哪些?以及這些函數庫有什麼作用以及怎麼使用這些函數?
  • STM32學習筆記——使用函數庫編程控制GPIO口輸出
    lLWIB組則根據需要添加,由於要點亮led燈需要用到GPIO和時鐘,所以添加了stm32f10x_gpio.c和stm32f10x_rcc.c兩個文件,均 在...projectLibrariesSTM32F10x_StdPeriph_Driversrc
  • 關於無線充電的三大標準和四種實現方式的介紹
    關於無線充電的三大標準和四種實現方式的介紹 工程師吳畏 發表於 2018-06-21 11:33:00 傳統的充電方式需要使用線纜連接電路和終端設備,這在某種程度上限制了終端設備的設計
  • net-snmp移植到arm
    關於net-snmp的移植,是基於靜態編譯的,動態的沒有做成功,在arm上的移植過程大致如下:如果沒有涉及到擴展agent,則藍色字體不需要理會。tar -xzvf net-snmp-5.4.1.tar.gz,若想擴展agent,則可以將此模塊的.c和.h文件先放到net-snmp-5.4.4/agent/mibgroup下一起配置編譯;例如我這裡想用代理讀寫encoder模塊,那麼先將寫好的encoder源文件複製到net-snmp-5.4.4/agent/mibgroup路徑下;2.CC=arm-linux-gcc
  • stc單片機IO口輸入輸出方式
    以下是轉載的正文:傳統51單片機IO接口只可以作為標準雙向IO接口,如果用其來驅動LED只能用灌電流的方式或是用三極體外擴驅動電路。本文引用地址:http://www.eepw.com.cn/article/201611/322747.htm灌電流方式:LED正極接VCC,負極接IO口。IO為高電平是LED兩極電平相同,沒有電流,LED熄滅;IO為低電平時,電流從VCC流入IO,LED點亮。
  • ARM 浮點運算詳解
    編譯:arm-hisiv200-linux-gcc -c -Wall fcpu.c -o fcpu.oarm-hisiv200-linux-gcc fcpu.o -o FCPU -L./運行,則得到32位浮點數加1024次所需要時間。
  • arm 微學術 架構_arm彙編 - CSDN
    @ goto 當前位置執行,構成執行死循環.end @ 代表整個彙編文件的結束$: arm-cortex_a9-linux-gnueabi-as test.s -o test.o // 編譯彙編代碼$: arm-cortex_a9-linux-gnueabi-objdump -S test.o > 1.
  • 關於無線解說器各個場合使用後的一段採訪
    無線解說器大家可能不太熟悉,實際上無線解說器就是大家常用的會議無線講解器,也就是科音達講解器。1.授課——教師來到一所職業學院,趕上一位老師使用完無線解說器。老師說,解說器佩戴起來沒有擴音器那麼累,擴音器使用的時候還需要常常去調整插線接觸的位置,以免聽不到聲音。
  • 唐口:水井裡面出沙子 村民吃水成難題
    【謝劉莊村村委會工作人員 】昨天給咱的書記村長昨天維修 昨天洗了一晚上井了 水質比以前要改善多了 只是沉澱物沙子比較多 原來是泥漿水 現在沉澱物是沙子了 水質改善多了 今天想再洗一天 把原來的沉澱物 都衝出來 先讓老百姓 都吃上水【解說】村委會工作人員說,由於村裡的這口水井已經到了使用年限,現在他們除了積極維修中,在兩個月前也向唐口街道水利站提出了新打一口井的申請書。
  • ARM Linux根文件系統Root Filesystem的製作
    關於devfs和udev的區別,網上很多文章說。當然如果你的內核已經不支持devfs了(2.6.12以後),可以使用純純的靜態節點。也就是用mknod人工生成。/bin、/usr/bin、/usr/sbin、/sbin是編譯Busybox這個Shell時候就有的,用於存放二進位可執行文件,就不多解釋了。/lib用於存放動態連結庫。
  • Flowcine X-Arm減震臂
    The very clean design makes it possible to give a frictionless and noiseless arm with absolute minimum push/pull force (down to 100g for the entire minimum and maximum positions) for its full boom
  • arm開發板與樹莓派有什麼區別
    ARM   ARM是英國的一個公司,主要設計ARM系列的處理器。   arm是一款處理器也可以說是單片機,是功能比較強大的單片機。   那麼目標用戶的不同,就導致樹莓派雖然看起來很像其他的 arm 開發板,基本也能用和其他的 arm 開發板一樣的方式使用,性質卻有很大的不同。   這也解釋了為什麼很多嵌入式行業的軟硬體開發者並不喜歡或者看好樹莓派,甚至對它很不屑,而很多對嵌入式了解很少的開發者以及使用者會對樹莓派趨之若鶩。
  • 單片機 arm 常用的接口總結
    常用的接口有spi,I2c,uart等,他們都有自己的協議規定,下面談談它們之間的聯繫與區別:1 I2C總線本文引用地址:http://www.eepw.com.cn/article/201611/321770.htm涉及到I2C的編程主要涉及到兩種情況:有專用控制器的arm晶片
  • ARM 一些特殊符號
    arm彙編程序中的符號 在arm彙編語言中,符號(symbols)可以代表地址(addresse)、變量(variables)和數字常量(numeric constants)。當符號代表地址時,又稱為標號(lable)。