STM32io口輸入輸出的理解

2022-05-13 20:25:04 字數 3333 閱讀 9991

**於:

最近在看資料手冊的時候,發現在cortex-m3裡,對於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 復用推挽輸出

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

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

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

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

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

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

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

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

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

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

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

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

六、總結在stm32中選用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 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 口配置和使用

對於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...