stm32 io 口配置和使用

2021-06-27 12:42:17 字數 3543 閱讀 5433

對於stm32 

gpio的配置種類有8種之多:

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

在使用stm32微控制器時這幾個概念是需要搞清楚的,平時接觸的最多的也就是推挽輸出、開漏輸出、上拉輸入這三種,但一直未曾對這些做過歸納。因此,在這裡做乙個總結:

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

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

二、開漏輸出:輸出端相當於三極體的集電極,要得到高電平狀態需要上拉電阻才行。適合於做電流型的驅動,其吸收電流的能力相對強(一般20ma以內)。開漏形式的電路有以下幾個特點(開漏,就等於輸出口接了個npn三極體,並且只接了e,b,而c極是開路的,你可以接乙個電阻到3.3v,也可以接乙個電阻到5v,這樣,在輸出1的時候,就可以是5v電壓,也可以是3.3v電壓了,但是不接電阻上拉的時候,這個輸出高就不能實現了,所以常用作電平轉換

):1、

利用外部電路的驅動能力,減少ic內部的驅動。當ic內部mosfet導通時,驅動電流是從外部的vcc流經上拉電阻、mosfet到gnd。ic內部僅需很小的柵極驅動電流。

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

3、開漏輸出

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

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

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

三、浮空輸入

顧名思義就是浮在空中,上面用繩子一拉就上去了,下面用繩子一拉就沉下去了。

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

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

i/o口的輸出模式下,有3種輸出速度可選(2mhz、10mhz和50mhz),這個速度是指i/o口驅動電路的響應速度而不是輸出訊號的速度,輸出訊號的速度與程式有關(晶元內部在i/o口 的輸出部分安排了多個響應速度不同的輸出驅動電路,使用者可以根據自己的需要選擇合適的驅動電路)。通過選擇速度來選擇不同的輸出驅動模組,達到最佳的雜訊 控制和降低功耗的目的。高頻的驅動電路,雜訊也高,當不需要高的輸出頻率時,請選用低頻驅動電路,這樣非常有利於提高系統的emi效能。當然如果要輸出較高頻率的訊號,但卻選用了較低頻率的驅動模組,很可能會得到失真的輸出訊號。

關鍵是gpio的引腳速度跟應用匹配(推薦10倍以上?)。比如:

對於串列埠,假如最大波特率只需115.2k,那麼用2m的gpio的引腳速度就夠了,既省電也雜訊小。

對於i2c介面,假如使用400k波特率,若想把餘量留大些,那麼用2m的gpio的引腳速度或許不夠,這時可以選用10m的gpio引腳速度。

對於spi介面,假如使用18m或9m波特率,用10m的gpio的引腳速度顯然不夠了,需要選用50m的gpio的引腳速度。

gpio口設為輸入時,輸出驅動電路與埠是斷開,所以輸出速度配置無意義。

在復位期間和剛復位後,復用功能未開啟,i/o埠被配置成浮空輸入模式。

所有埠都有外部中斷能力。為了使用外部中斷線,埠必須配置成輸入模式。

gpio口的配置具有上鎖功能,當配置好gpio口後,可以通過程式鎖住配置組合,直到下次晶元復位才能解鎖。

①配置輸入的時鐘

②初始化後即被啟用(開啟)

③如果使用該外設的輸入輸出管腳,則需要配置相應的gpio埠(否則該外設對應的輸入輸出管腳可以做普通gpio管腳使用)

④再對外設進行詳細配置。

對應到外設的輸入輸出功能有下述三種情況:

一、外設對應的管腳為輸出:需要根據外圍電路的配置選擇對應的管腳為復用功能的推挽輸出或復用功能的開漏輸出。

二、外設對應的管腳為輸入:則根據外圍電路的配置可以選擇浮空輸入、帶上拉輸入或帶下拉輸入。

三、adc對應的管腳:配置管腳為模擬輸入。

如果把埠配置成復用輸出功能,則引腳和輸出暫存器斷開,並和片上外設的輸出訊號連線。將管腳配置成復用輸出功能後,如果外設沒有被啟用,那麼它的輸出將不確定。

3.1  通用io埠(gpio)初始化:

rcc_apb2periphclockcmd(rcc_apb2periph_gpioa | b | c, enable):使能apb2匯流排外設時鐘

rcc_ apb2periphresetcmd (rcc_apb2periph_gpioa | b | c, disable):釋放gpio復位

3.2   配置各個pin埠(模擬輸入_ain、輸入浮空_in_floating、輸入上拉_ipu、輸入下拉_ipd、開漏輸出_out_od、推挽式輸出_out_pp、推挽式復用輸出_af_pp、開漏復用輸出_af_od)

gpio_inittypedef gpio_initstructure;

gpio_initstructure.gpio_pin = gpio_pin_9;

gpio_initstructure.gpio_mode = gpio_mode_af_pp;

gpio_initstructure.gpio_speed = gpio_speed_50mhz;

gpio_init(gpioa, &gpio_initstructure); 

3.3 gpio初始化完成

STM32 IO口工作模式

一 推挽輸出 可以輸出高 低電平,連線數字器件 推挽結構一般是指兩個三極體分別受兩個互補訊號的控制,總是在乙個三極體導通的時候另乙個截止。高低電平由ic的電源決定。推挽電路是兩個引數相同的三極體或mosfet,以推挽方式存在於電路中,各負責正負半周的波形放大任務,電路工作時,兩隻對稱的功率開關管每次...

STM32 IO口模式介紹

gpio mode ain 模擬輸入模式 gpio mode in floating 浮空輸入模式 gpio mode ipd 下拉輸入模式 gpio mode ipu 上拉輸入模式 gpio mode out od 通用開漏輸出模式 gpio mode out pp 通用推挽輸出模式 gpio m...

stm32 IO復用配置

gpio pinafconfig gpioa,gpio pinsource9,gpio af usart1 gpioa9usart1解析 gpio為埠a的基址 gpio pinsource9 為埠9 gpio af usart1 復用對映,巨集定義為 define gpio af usart1 ui...