STM32的GPIO輸入輸出模式配置

2021-01-08 電子產品世界
最近在看數據手冊的時候,發現STM32GPIO輸入輸出模式的配置種類有8種之多(輸入和輸入各4種):

(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復用推輓輸出

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

我們平時接觸的最多的也就是推輓輸出、開漏輸出、上拉輸入這三種,但對於各種模式下IO口的內部電路和典型應用,STM32的數據手冊中也未曾做過詳細的說明和歸納。因此,這裡收集了一些網上的資料,試圖做一總結。

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

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

詳細理解:

推挽放大器的輸出級有兩個「臂」(兩組放大元件),一個「臂」的電流增加時,另一個「臂」的電流則減小,二者的狀態輪流轉換。對負載而言,好像是一個「臂」在推,一個「臂」在拉,共同完成電流輸出任務。當輸出高電平時,也就是下級負載門輸入高電平時,輸出端的電流將是下級門從本級電源經VT3拉出。這樣一來,輸出高低電平時,VT3 一路和 VT5 一路將交替工作,從而減低了功耗,提高了每個管的承受能力。又由於不論走哪一路,管子導通電阻都很小,使RC常數很小,轉變速度很快。因此,推拉式輸出級既提高電路的負載能力,又提高開關速度。

開漏輸出:輸出端相當於三極體的集電極. 要得到高電平狀態需要上拉電阻才行. 適合於做電流型的驅動,其吸收電流的能力相對強(一般20ma以內).

開漏形式的電路有以下幾個特點:

1. 利用外部電路的驅動能力,減少IC內部的驅動。當IC內部MOSFET導通時,驅動電流是從外部的VCC流經R pull-up ,MOSFET到GND。IC內部僅需很下的極驅動電流。

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

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

4. 可以將多個開漏輸出的Pin,連接到一條線上。通過一隻上拉電阻,在不增加任何器件的情況下,形成「與邏輯」關係。這也是I2C,SMBus等總線判斷總線佔用狀態的原理。補充:什麼是「線與」?:

在一個結點(線)上,連接一個上拉電阻到電源VCC或VDD和n個NPN或NMOS電晶體的集電極C或漏極D,這些電晶體的發射極E或源極S都接到地線上,只要有一個電晶體飽和,這個結點(線)就被拉到地線電平上.因為這些電晶體的基極注入電流(NPN)或柵極加上高電平(NMOS),電晶體就會飽和,所以這些基極或柵極對這個結點(線)的關係是或非NOR邏輯.如果這個結點後面加一個反相器,就是或OR邏輯.

其實可以簡單的理解為:在所有引腳連在一起時,外接一上拉電阻,如果有一個引腳輸出為邏輯0,相當於接地,與之並聯的迴路「相當於被一根導線短路」,所以外電路邏輯電平便為0,只有都為高電平時,與的結果才為邏輯1。

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

浮空輸入:對於浮空輸入,一直沒找到很權威的解釋,.

也有認為[2]:如果既要用於輸出,又要接收信號作輸入,無需改變該pin的工作模式,只需設定為浮空浮點狀態GPIO_Mode_IN_FLOATING ,但是讀的時候讀輸入寄存器(GPIOE->IDR)的值。輸出值照樣設定,不過輸出pin腳可能要硬體上上拉。

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

上拉輸入/下拉輸入/模擬輸入:這幾個概念很好理解,從字面便能輕易讀懂。
復用開漏輸出、復用推輓輸出:可以理解為GPIO口被用作第二功能時的配置情況(即並非作為通用IO口使用)

最後總結下使用情況:
在STM32中選用IO模式
(1)浮空輸入_IN_FLOATING ——浮空輸入,可以做KEY識別,RX1
(2)帶上拉輸入_IPU——IO內部上拉電阻輸入
(3)帶下拉輸入_IPD—— IO內部下拉電阻輸入
(4)模擬輸入_AIN ——應用ADC模擬輸入,或者低功耗下省電
(5)開漏輸出_OUT_OD ——IO輸出0接GND,IO輸出1,懸空,需要外接上拉電阻,才能實現輸出高電平。當輸出為1時,IO口的狀態由上拉電阻拉高電平,但由於是開漏輸出模式,這樣IO口也就可以由外部電路改變為低電平或不變。可以讀IO輸入電平變化,實現C51的IO雙向功能
(6)推輓輸出_OUT_PP ——IO輸出0-接GND, IO輸出1 -接VCC,讀輸入值是未知的
(7)復用功能的推輓輸出_AF_PP ——片內外設功能(I2C的SCL,SDA)
(8)復用功能的開漏輸出_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;

相關焦點

  • stm32H7系列GPIO引腳模式如何選擇及開漏,推輓輸出模式使用場景
    gpio口大家都理解,就是一般用來輸出高低電平而已。但實際配置時就會發現有很多問題,尤其是GPIO埠引腳的一些模式參數問題更是難以理解。今天我就從我自己理解的角度來跟大家說說:開漏,推挽,上拉,下拉。
  • Longan nano(GD32VF103)GPIO最小配置
    gd32vf103cbt6跟stm32的使用非常相似,如果使用C開發,基本上與指令集架構沒啥關係。本文介紹GPIO的最小配置,不使用sdk,直接操作寄存器,這樣可以更加直觀的了解晶片和外設。控制gpio就跟學程式語言列印hello world一樣,是開始學習新知識的第一步。
  • STM32關於GPIO的問題
    = GPIO_Mode_IPU;中IPU是指IO口的工作模式是帶上拉輸入,這個和具體的電路本文引用地址:http://www.eepw.com.cn/article/201611/322604.htm有關,總之如果選擇某個IO口作為外部中斷的觸發信號,就必須配置這個IO口為輸入模式,不然無法觸發中斷8、stm32中GPIO口的最大輸出速度如何理解?
  • STM32輸入輸出模式理解
    2)作為普通GPIO輸出:根據需要配置該引腳為推輓輸出或開漏輸出,同時不要使能該引腳對應的所有復用功能模塊。3)作為普通模擬輸入:配置該引腳為模擬輸入模式,同時不要使能該引腳對應的所有復用功能模塊。4)作為內置外設的輸入:根據需要配置該引腳為浮空輸入、帶弱上拉輸入或帶弱下拉輸入,同時使能該引腳對應的某個復用功能模塊。
  • STM32 GPIO引腳模式配置
    STM32單片機中,GPIO引腳可以配置為較多的模式,本文將對此方面進行介紹。本文引用地址:http://www.eepw.com.cn/article/201611/320771.htm一、輸入/輸出模式二、輸出模式GPIO輸出模式下,幾種速度的區別:(1). GPIO 引腳速度:GPIO引腳速度主要有三種:2MHz、10MHz、 50MHz。
  • 關於stm32的GPIO的操作
    三、GPIO的工作模式通過對4種埠配置寄存器進行編程,可將GPIO口的各個埠位配置成以下8種工作模式:輸入+懸空 輸入+上拉 輸入+下拉 模擬(用作ADC輸入、DAC輸出或者捕獲輸入情況下) 輸出+開漏+上拉/下拉(輸出模式時GPIO
  • STM32開發板例程講解之二:GPIO的描述和配置
    上一講創建了一個stm32工程,從本講開始將深入stm32內核與外設講解。    首先介紹stm32的GPIO,這是入門的起點,也是最容易上手的部分。當輸出為1時,IO口的狀態由上拉電阻拉高電平,但由於是開漏輸出模式,這樣IO口也就可以由外部電路改變為低電平或不變。可以讀IO輸入電平變化,實現C51的IO雙向功能。(6)推輓輸出_OUT_PP ——IO輸出0-接GND, IO輸出1 -接VCC,讀輸入值是未知的。
  • STM32的GPIO配置不同輸出速度會有什麼影響?
    不管標準外設庫,還是STM32CubeMX配置GPIO輸出引腳,都會有速度GPIO_InitStruct.Speed這個選項。一般定義在xxx_gpio.h文件中。GPIO,使用STM32CubeMX配置,默認配置低:當然,如果配置成其他模式,有可能是中,或高。
  • stm32單片機中使用GPIO口模擬PWM輸出解析
    gpio   General Purpose Input Output (通用輸入/輸出)簡稱為GPIO,或總線擴展器,人們利用工業標準I2C、SMBus或SPI接口簡化了I/O口的擴展。當微控制器或晶片組沒有足夠的I/O埠,或當系統需要採用遠端串行通信或控制時,GPIO產品能夠提供額外的控制和監視功能。
  • 關於stm32硬體spi的miso口配置
    在我們剛使用spi時,對於spi的io口配置可能會有一些疑惑吧,miso明明是一個輸入口卻配置成了復用推輓輸出,是不是會有一點疑惑呢?其實配置為復用推輓輸出也是可以正常工作的,只不過配置成浮空輸入和上拉輸入更容易理解。具體產生這一問題的原因是:從功能上來說,MISO應該配置為輸入模式才對,但為什麼也可以配置為GPIO_Mode_AF_PP?實際上當一個GPIO埠配置為GPIO_Mode_AF_PP時,片上外設的復用功能輸出信號會連接到輸出控制電路,然後在埠上產生輸出信號。
  • 通過stm32 cubemx 配置 串口中斷
    (離線跑的節拍是在在線模式下下載的)在線模式:如果是直接輸出,按照指定格式下發CAN消息,MCU接受消息並解析,切繼電器點燈;如果是存儲節拍,MCU內部Flash存儲上位機通過CAN下發的點燈節拍。主控制器:STM32(CAN,串口,網口,輸入,輸出)上位機:LibView ACR:卷收器(座椅上面的安全帶)ABL:電機(座椅右下角接安全帶的插孔)PUMA:控制器發送CAN給PUMA,PUMA控制ACR和ABL(DBC文件的解析);ACR通過CAN控制,ABL通過PWM控制電機。
  • 再造STM32---第十部分:GPIO輸入—按鍵檢測
    (3) 向 GPIO 初始化結構體賦值,把引腳初始化成浮空輸入模式,其中的 GPIO_Pin 使用宏「KEYx_PIN」來賦值,使函數的實現方便移植。 由於引腳的默認電平受按鍵電路影響,所以設置成「浮空/上拉/下拉」模式均沒有區別。
  • STM32 互補輸出和死區插入
    2、捕獲/比較使能寄存器TIM1_CCER 這裡要設置的只是使能通道x的互補輸出,或輸出極性:TIM1->CCER|=1<<2;      //CH1互補輸出使能  剩下的還需要設置:捕獲/比較模式寄存器 TIMx_CCMR1 設置輸出PWM的模式和開啟預裝載功能:TIM1->CCMR1|=6<<
  • STM32_GPIO配置及庫函數講解——LED跑馬燈
    gpiogeneral-purposeinput/output通用輸入/輸出埠GPIO寄存器縮寫列表本文引用地址:http://www.eepw.com.cn/article/201611/317025.htm
  • stm32晶片被鎖,使用jlink就能輕輕鬆鬆解鎖
    ,配置界面需要有添加,讀取,查找,刪除功能。(離線跑的節拍是在在線模式下下載的)在線模式:如果是直接輸出,按照指定格式下發CAN消息,MCU接受消息並解析,切繼電器點燈;如果是存儲節拍,MCU內部Flash存儲上位機通過CAN下發的點燈節拍。
  • stm32 學習 (設置TIM4輸出4路 pwm J-LINK仿真驗證)
    X >= A 時輸出低電平(高電平) ; PWM佔空比:A/(N+1)stm32的pwm輸出只要設置好在主循環前調用一次即可, 對用的IO就可以持續的輸出PWMTIM4配置PWM過程程序:(離線跑的節拍是在在線模式下下載的)在線模式:如果是直接輸出,按照指定格式下發CAN消息,MCU接受消息並解析,切繼電器點燈;如果是存儲節拍,MCU內部Flash存儲上位機通過CAN下發的點燈節拍。
  • stm32的USART如何發送字符、字符串
    ,馬達循環下極限,馬達循環次數,馬達循環等待時間;保存至少30款產品的配置,配置界面需要有添加,讀取,查找,刪除功能。(離線跑的節拍是在在線模式下下載的)在線模式:如果是直接輸出,按照指定格式下發CAN消息,MCU接受消息並解析,切繼電器點燈;如果是存儲節拍,MCU內部Flash存儲上位機通過CAN下發的點燈節拍。
  • STM32的GPIO使用的函數剖析
    這個函數的實現是在Stm32f10x_gpio.c文件中,若要使用該函數在相應的應用程式的前面包含Stm32f10x_gpio.h頭文件。1、參數GPIO_TypeDef該函數的第一個參數為GPIO_TypeDef,它是一個結構體類型,該類型在Stm32f10x.h中被定義。
  • STM32——PWM輸出總結
    學習後發現stm32的定時器功能確實很強大,小總結一下方便以後使用的時候做參考。今天我主要是用定時器做pwm輸出,所以總結也主要是針對pwm方面的。 先大致說下通用和高級定時器的區別。通用的可以輸出四路pwm信號互不影響。高級定時器可以輸出三對互補pwm信號外加ch4通道,也就是一共七路。所以這樣算下來stm32一共可以生成4*5+7*2=30路pwm信號。
  • stm32 啟動代碼 C語言實現 2
    如圖在這種low_level 初始化的這個階段,我先用MSI作為系統的時鐘,並且配置為8Mhz。以後再根據我的板子用外部的HSE實現。先來看看硬體。1,選擇MSI的時鐘頻率配置在哪個寄存器。2,配置MSI range頻率大小。3,選擇系統時鐘源是MSI。4,enable MSI時鐘。CR 0x79. CFGR 0x00LED的硬體只要拉低LED_R就行。