相信在開發STM32的時候很多小伙伴都會碰到GPIO的設置問題,如下圖所示:
對于設置成什么模式,很多新手是迷茫的,這是由于對這些模式的含義理解不清,導致在實際項目中對管腳的配置有誤,使電路出現問題。下面這張圖是GPIO內部的架構圖,先大致看一下。
我們首先來看輸入部分,輸入分為:浮空輸入,上拉輸入,下拉輸入,模擬輸入。
(1)上拉輸入指的是芯片內部控制引腳通過電阻接到電源電壓,加強引腳的驅動能力,有助于防止引腳處于不穩定狀態,減少誤觸發和噪音干擾。如下圖所示:
由于芯片內部的上拉電阻是可以通過開關來進行通斷的,如下:
(2)下拉輸入指的是芯片內部控制引腳通過電阻接到GND。通過下拉電阻把引腳的電平固定在低電平狀態,防止電平浮動引發的干擾和誤觸發。
由于芯片內部的下拉電阻是可以通過開關來進行通斷的,如下:
(3)浮空輸入浮空輸入其實很好理解,就是輸入引腳不接任何的電源(VDD)和地平面(GND),處于一個開路的狀態。對于浮空輸入,在很多情況下引腳很容易受到周圍環境的干擾,引起電壓的波動。
(4)推挽輸出推挽輸出的基本模型如下圖所示:
由上面兩張圖可知,輸出引腳可以通過控制上管和下管的導通和截止來改變引腳的輸出。基本通路如下:
(5)開漏輸出開漏是很多初學者無法理解的一種狀態,開漏其實就只有一個下管,如下圖所示:
當外部沒有接上拉電阻時,引腳是無法輸出高電平的,只能實現低電平狀態,所以一般開漏模式都會外置上拉電阻來配合使用,如果沒有外置上拉電阻的話,引腳只能是低電平和高阻態,而無法實現高電平狀態。電平的幅值主要取決于外部的上拉電壓,可實現電平轉換。但驅動能力完全靠外部上拉電阻,功率和速率都被限制。
(6)高阻態其實很好理解,高阻,高阻,就是指輸入引腳的阻抗會非常的高,幾乎沒有電流的流動,這樣的好處在于不會影響到其他電路的正常運行。一般高阻態的取值既不是0,也不是1,通常用“X”表示,處于一種中間的狀態。相對于高阻態來說,開漏輸出就是一種阻值非常低的“低阻態了”。
總結: