STM32的IO口輸入輸出模式的理解

2020-11-24 電子產品世界

最近在看數據手冊的時候,發現在Cortex-M3裡,對於GPIO的配置種類有8種之多:

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

(1)GPIO_Mode_AIN 模擬輸入

(2)GPIO_Mode_IN_FLOATING 浮空輸入

(3)GPIO_Mode_IPD 下拉輸入

(4)GPIO_Mode_IPU 上拉輸入

(5)GPIO_Mode_Out_OD 開漏輸出

(6)GPIO_Mode_Out_PP 推輓輸出

(7)GPIO_Mode_AF_OD 復用開漏輸出

(8)GPIO_Mode_AF_PP 復用推輓輸出

一、推輓輸出:可以輸出高、,連接數字器件;推挽結構一般是指兩個分別受兩個互補信號的控制,總是在一個三極體導通的時候另一個截止。高低電平由IC的電源決定。

推挽電路是兩個參數相同的三極體或MOSFET,以推挽方式存在於電路中,各負責正負半周的波形放大任務,電路工作時,兩隻對稱的功率開關管每次只有一個導通,所以導通損耗小、效率高。輸出既可以向負載灌電流,也可以從負載抽取電流。推拉式輸出級既提高電路的負載能力,又提高開關速度。

二、開漏輸出:輸出端相當於三極體的集電極,要得到高電平狀態需要才行。適合於做電流型的驅動,其吸收電流的能力相對強(一般20mA以內)。開漏形式的電路有以下幾個特點:

1、利用外部電路的驅動能力,減少IC內部的驅動。當IC內部MOSFET導通時,驅動電流是從外部的VCC流經上拉電阻、MOSFET到GND。IC內部僅需很小的柵極驅動電流。

2、一般來說,開漏是用來連接不同電平的器件,匹配電平用的,因為開漏引腳不連接外部的上拉電阻時,只能輸出低電平,如果需要同時具備輸出高電平的功能,則需要接上拉電阻,很好的一個優點是通過改變上拉電源的電壓,便可以改變傳輸電平。比如加上上拉電阻就可以提供TTL/CMOS電平輸出等。(上拉電阻的阻值決定了邏輯電平轉換的速度。阻值越大,速度越越小,所以負載電阻的選擇要兼顧功耗和速度。)

3、開漏輸出提供了輸出方式,但是也有其弱點,就是帶來上升沿的延時。因為上升沿是通過外接上拉無源電阻對負載充電,所以當電阻選擇小時延時就小,但功耗大;反之延時大功耗小。所以如果對延時有要求,則建議用下降沿輸出。

4、可以將多個開漏輸出連接到一條線上。通過一隻上拉電阻,在不增加任何器件的情況下,形成「與邏輯」關係,即「線與」。可以簡單的理解為:在所有引腳連在一起時,外接一上拉電阻,如果有一個引腳輸出為邏輯0,相當於接地,與之並聯的迴路「相當於被一根導線短路」,所以外電路邏輯電平便為0,只有都為高電平時,與的結果才為邏輯1。

關於推輓輸出和開漏輸出,最後用一幅最簡單的圖形來概括:該圖中左邊的便是推輓輸出模式,其中輸出高電平時下面的PNP三極體截止,而上面NPN三極體導通,輸出電平VS+;當比較器輸出低電平時則恰恰相反,PNP三極體導通,輸出和地相連,為低電平。右邊的則可以理解為開漏輸出形式,需要接上拉。

三、浮空輸入:對於浮空輸入,一直沒找到很權威的解釋,只好從以下圖中去理解了

由於浮空輸入一般多用於外部按鍵輸入,結合圖上的輸入部分電路,我理解為浮空輸入狀態下,IO的電平狀態是的,完全由外部輸入決定,如果在該引腳懸空的情況下,讀取該埠的電平是不確定的。

四、上拉輸入/下拉輸入/模擬輸入:這幾個概念很好理解,從字面便能輕易讀懂。

五、復用開漏輸出、復用推輓輸出:可以理解為GP被用作第二功能時的配置情況(即並非作為通用IO口使用)

六、總結在中選用IO模式

1、浮空輸入GPIO_IN_FLOATING ——浮空輸入,可以做KEY識別,RX1

2、帶上拉輸入GPIO_IPU——IO內部上拉電阻輸入

3、帶下拉輸入GPIO_IPD—— IO內部下拉電阻輸入

4、模擬輸入GPIO_AIN ——應用ADC模擬輸入,或者低功耗下省電

5、開漏輸出GPIO_OUT_OD ——IO輸出0接GND,IO輸出1,懸空,需要外接上拉電阻,才能實現輸出高電平。當輸出為1時,IO口的狀態由上拉電阻拉高電平,但由於是開漏輸出模式,這樣IO口也就可以由外部電路改變為低電平或不變。可以讀IO輸入電平變化,實現C51的IO雙向功能

6、推輓輸出GPIO_OUT_PP ——IO輸出0-接GND, IO輸出1 -接VCC,讀輸入值是未知的

7、復用功能的推輓輸出GPIO_AF_PP ——片內外設功能(I2C的SCL,SDA)

8、復用功能的開漏輸出GPIO_AF_OD——片內外設功能(TX1,MOSI,MISO.SCK.SS)

七、STM32設置實例:

1、模擬I2C使用開漏輸出_OUT_OD,接上拉電阻,能夠正確輸出0和1;讀值時先GPIO_SetBits(GPIOB, GPIO_Pin_0);拉高,然後可以讀IO的值;使用GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);

2、如果是無上拉電阻,IO默認是高電平;需要讀取IO的值,可以使用帶上拉輸入_IPU和浮空輸入_IN_FLOATING和開漏輸出_OUT_OD;

八、通常有5種方式使用某個引腳功能,它們的配置方式如下:

1、作為普通GPIO輸入:根據需要配置該引腳為浮空輸入、帶弱上拉輸入或帶弱下拉輸入,同時不要使能該引腳對應的所有復用。

2、作為普通GPIO輸出:根據需要配置該引腳為推輓輸出或開漏輸出,同時不要使能該引腳對應的所有復用功能模塊。

3、作為普通模擬輸入:配置該引腳為模擬輸入模式,同時不要使能該引腳對應的所有復用功能模塊。

4、作為內置外設的輸入:根據需要配置該引腳為浮空輸入、帶弱上拉輸入或帶弱下拉輸入,同時使能該引腳對應的某個復用功能模塊。

5、作為內置外設的輸出:根據需要配置該引腳為復用推輓輸出或復用開漏輸出,同時使能該引腳對應的所有復用功能模塊。

注意如果有多個復用功能模塊對應同一個引腳,只能使能其中之一,其它模塊保持非使能狀態。比如要使用STM32F103VBT6的47、48腳的USART3功能,則需要配置47腳為復用推輓輸出或復用開漏輸出,配置48腳為某種輸入模式,同時使能USART3並保持I2C2的非使能狀態。如果要使用STM32F103VBT6的47腳作為TIM2_CH3,則需要對TIM2進行重映射,然後再按復用功能的方式配置對應引腳。

  • STM32單片機中文官網
  • STM32單片機官方開發工具
  • STM32單片機參考設計

相關焦點

  • stc單片機IO口輸入輸出方式
    IO口的四種使用方法從I/O口的特性上看,標準51的P0口在作為I/O口使用時,是開漏結構,在實際應用中通常要添加上拉電阻;P1、P2、P3都是準雙向I/O,內部有上拉電阻,既可作為輸入又可以作為輸出。
  • STM32的IO口灌入電流和輸出驅動電流最大是多少?
    不過對於普通的IO口的應用,配置會比較簡單,主要就以下幾個步驟:   1.打開相應IO口的時鐘;   2.打開IO口相應引腳位;   3.配置IO口的模式;   4.初始化IO埠。   對於STM32的IO口可以根據需要由軟體配置成8種模式:   (1)GPIO_Mode_AIN 模擬輸入   (2)GPIO_Mode_IN_FLOATING 浮空輸入   (3)GPIO_Mode_IPD 下拉輸入   (4)GPIO_Mode_IPU 上拉輸入   (5)GPIO_Mode_Out_OD 開漏輸出
  • stm32單片機中使用GPIO口模擬PWM輸出解析
    gpio   General Purpose Input Output (通用輸入/輸出)簡稱為GPIO,或總線擴展器,人們利用工業標準I2C、SMBus或SPI接口簡化了I/O口的擴展。當微控制器或晶片組沒有足夠的I/O埠,或當系統需要採用遠端串行通信或控制時,GPIO產品能夠提供額外的控制和監視功能。
  • stm32編碼器的接口模式
    編碼器是什麼玩意呢,它可是一個好玩的東西,做小車測速必不可少的玩意,下面,我將從編碼器的原理講起,一直到用stm32的編碼器接口模式,測出電機轉速與方向。2.stm32編碼器接口模式(寄存器)        stm32的編碼器接口模式在STM32中文參考手冊中有詳細的說明,在手冊273頁,14.3.12節。程序是完全按照 下圖方式,設置寄存器的。
  • STM32的GPIO口的輸出:開漏輸出和推輓輸出
    很多晶片的供電電壓不一樣,有3.3v和5.0v,需要把幾種IC的不同口連接在一起,是不是直接連接就可以了?開漏Pin不連接外部的上拉電阻,則只能輸出低電平(因此對於經典的51單片機的P0口而言,要想做輸入輸出功能必須加外部上拉電阻,否則無法輸出高電平邏輯)。  5. 標準的開漏腳一般只有輸出的能力。添加其它的判斷電路,才能具備雙向輸入、輸出的能力。  應用中需注意:  1. 開漏和開集的原理類似,在許多應用中我們利用開集電路代替開漏電路。
  • STC8單片機之深入理解輸入/輸出口的工作模式
    在學習和設計產品的過程中,該如何理解和使用這4種輸入/輸出口的工作模式呢?2、準雙向口工作模式STC8系列單片機輸入/輸出口的準雙向口工作模式內部電路結構如圖1所示。雖然準雙向口工作模式的內部電路結構看起來比較複雜,但是,在進行硬體電路設計和軟體編程過程中,僅僅需要知道以下兩個基本操作原理即可。
  • 單片機小白學步(23) IO口原理知識補充:雙向IO口 互補推挽
    IO口模式下,為準雙向IO口。雙向IO口的輸入:高阻態、輸入電阻雙向IO口的輸出,只要求能輸出高低電平,因此並不是必須採用互補推挽電路。而採用互補推挽電路的好處在於,這種電路同時又可以實現高阻態的輸入,從而實現標準雙向IO口。當圖中的K1和K2同時斷開時,IO口就可以工作在高阻態的輸入狀態下。高阻態到底是什麼樣的一個概念呢?
  • 推輓輸出、開漏輸出、復用開漏輸出的區別
    上拉輸入/下拉輸入/模擬輸入:這幾個概念很好理解,從字面便能輕易讀懂。復用開漏輸出、復用推輓輸出:可以理解為GPIO口被用作第二功能時的配置情況(即並非作為通用IO口使用)最後總結下使用情況:在STM32中選用IO模式(1) 浮空輸入_IN_FLOATING ——浮空輸入,可以做KEY識別,RX1(2)帶上拉輸入_IPU——IO內部上拉電阻輸入(3)帶下拉輸入_IPD—— IO內部下拉電阻輸入(
  • avr單片機和stm32區別與優缺點分析
    摘要:avr單片機和stm32單片機是目前使用較廣泛的單片機,那麼avr單片機和stm32單片機有什麼區別呢?有什麼優劣勢呢?   3. avr的I/O腳類似pic,它也有用來控制輸入或輸出的方向寄存器,在輸出狀態下,高電平輸出的電流在10mA左右,低電平吸入電流20mA。這點雖不如pic,但比51系列還是要優秀。   AVR單片機優點:   AVR單片機是Atmel公司推出的較為新穎的單片機,其顯著的特點為高性能、高速度、低功耗。
  • stm32庫函數學習篇通用定時器輸入捕獲功能
    實現功能:PA8隨意延時驅動led燈閃爍,並且將PA8用杜邦線連接到PA7口,PA7是通用定時器TIM3的2通道,在TIM3_CH2觸發中斷程序中取反連接到PD2口的led燈,指示中斷程序運行,並且每次進入中斷後改變觸發捕獲的極性。實現兩個led燈會交替閃爍。
  • 單片機IO口科普:推輓輸出、開漏輸出詳解
    其示意結構如下圖所示:       當內部輸出1電平時,上邊的MOS管導通同時下邊的MOS管截至,IO口輸出高電平;  當內部輸出0電平時,上邊的MOS管截至同時下邊的MOS管導通,IO口輸出低電平;  3.
  • 單片機IO口結構及上拉電阻
    由圖可見,電路中包含一個數據輸出鎖存器(D觸發器)和兩個三態數據輸入緩衝器,另外還有一個數據輸出的驅動(T1和T2)和控制電路。這兩組口線用來作為CPU與外部數據存儲器、外部程序存儲器和I/O擴展口,而不能象P1、P3直接用作輸出口。它們一起可以作為外部地址總線,P0口身兼兩職,既可作為地址總線,也可作為數據總線。
  • 基於STM32的OV7670攝像頭總結
    (stm32的IO速度,寄存器比庫函數快,博主之前測,用庫函數IO口速度好像是2.5Mhz,而用寄存器IO口速度是8M吧,速度相差較大~)。但不建議這麼做,原因是:這種寄存器設置將帶來更多的學習困難和理解困難,並導致硬體圖像的採集速度可能下降到0.5 幀以下,同時帶來圖像失真的可能。  還有一種方法就是DMA方式採集,代碼複雜,速度在5-10幀左右。(博主本來想用該方法的,可是基礎差,調試困難。會接著調試~)  註:部分CMOS 時鐘速度不快,可以單片機直接採集,如OV7660,但該晶片已經停產。
  • 一文解析stm32產生spwm原理及程序
    打開APP 一文解析stm32產生spwm原理及程序 發表於 2018-05-18 09:11:49 SPWM法就是以該結論為理論基礎,用脈衝寬度按正弦規律變化而和正弦波等效的PWM波形即SPWM波形控制逆變電路中開關器件的通斷,使其輸出的脈衝電壓的面積與所希望輸出的正弦波在相應區間內的面積相等,通過改變調製波的頻率和幅值則可調節逆變電路輸出電壓的頻率和幅值。本文主要詳解stm32產生spwm原理及程序,首先來了解一下生成SPWM波的基理是什麼,具體得跟隨小編一起來了解一下。
  • 理解卷積神經網絡中的輸入與輸出形狀(Keras實現)
    即使我們從理論上理解了卷積神經網絡,在實際進行將數據擬合到網絡時,很多人仍然對其網絡的輸入和輸出形狀(shape)感到困惑。本文章將幫助你理解卷積神經網絡的輸入和輸出形狀。讓我們看看一個例子。CNN的輸入數據如下圖所示。
  • STM32F4輸出PWM波形的配置總結
    原理圖通用定時器可以利用GPIO引腳進行脈衝輸出,在配置為比較輸出、PWM輸出功能時,捕獲/比較寄存器TIMx_CCR被用作比較功能,下面把它簡稱為比較寄存器。>{ //此部分需手動修改IO口設置GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef
  • STM32 的三種不同啟動模式
    BOOT1=0 BOOT0=1 從系統存儲器啟動,這種模式啟動的程序功能由廠家設置。BOOT1=1 BOOT0=1 從內置SRAM 啟動,這種模式可以用於調試。要注意的是,一般不使用內置SRAM 啟動(BOOT1=1 BOOT0=1),因為SRAM 掉電後數據就丟失。多數情況下SRAM 只是在調試時使用,也可以做其他一些用途。
  • STM32 GPIO工作原理及LED電路原理
    與開漏輸出模式唯一的區別在於輸出控制電路之前電平的來源開漏輸出模式的輸出電平是由CPU寫入輸出數據寄存器控制的開漏推輓輸出模式的輸出電平是由復用功能外設輸出決定的 其他與開漏輸出模式相似:控制電路輸出為1:N-MOS截止,IO口電平由外部上拉/下拉決定控制電路輸出為0
  • STM32單片機GPIO寄存器
    -7號的話,則寫CRL寄存器,如果IO口是8-15號的話,則寫CRH寄存器,兩個32位數據寄存器(GPIOx_IDR,GPIOx_ODR)一個是只讀作輸入數據寄存器,一個是只寫作輸出寄存器,一個32位置位/復位寄存器(GPIOx_BSRR),一個16位復位寄存器(GPIOx_BRR)和一個32位鎖定寄存器(GPIOx_LCKR)。