STM32入門系列 GPIO結構

2021-08-10 22:18:53 字數 2874 閱讀 5950

已經了解了stm32 gpio的基本概念及引腳分類。現在來看下stm32 gpio內部的結構是怎樣的。io埠位的基本結構如下圖所示。

從圖中可以看出gpio內部結構還是比較複雜的,只要將這張gpio結構圖理解好,那麼關於gpio的各種應用模式將非常清楚。圖中最右端i/o埠就是stm32晶元的引腳,其它部分都在stm32晶元內部。上圖中我們將每部分都用紅色數字標號了,按照順序我們逐一講解。

保護二極體

引腳內部加上這兩個保護二級管可以防止引腳外部過高或過低的電壓輸入,當引腳電壓高於vdd_ft或vdd時,上方的二極體導通吸收這個高電壓,當引腳電壓低於vss時,下方的二極體導通,防止不正常電壓引入晶元導致晶元燒毀。

儘管stm32晶元內部有這樣的保護,但並不意味著stm32的引腳就無所不能,如果直接將引腳連線大功率器件,比如電機,那麼要麼電機不轉,要麼燒壞晶元。如果要驅動一些大功率器件,必須要加大功率及隔離電路驅動。也可以說stm32引腳是用來做控制,而不是做驅動使用的。

上下拉電阻

從圖中可以看到,上拉和下拉電阻上都有乙個開關,通過配置上下拉電阻開關,可以控制引腳的預設狀態電平。當開啟上拉時引腳預設電壓為高電平,開啟下拉時,引腳預設電壓為低電平,這樣就可以消除引腳不定狀態的影響。當然也可以將上拉和下拉的開關都關斷,這種狀態我們稱為浮空模式,一旦配置成這個模式,引腳的電壓是不確定的,如果用萬用表測量此模式下管腳電壓時會發現只有 1 點幾伏,而且還不時改變,所以一般情況下我們都會給引腳設定成上拉或者下拉模式,使它有乙個預設狀態。stm32 上下拉及浮空模式的配置是通過gpiox_crl和gpiox_crh暫存器控制的,大家在《stm32f1xx中文參考手冊》查閱。stm32內部的上拉其實是乙個弱上拉,也就是說通過此上拉電阻輸出的電流很小,如果想要輸出乙個大電流,那麼就需要外接上拉電阻了。

p-mos和n-mos管

gpio引腳經過兩個保護二極體後就分成兩路,上面一路是「輸入模式」,下面一路是「輸出模式」。我們先講輸出模式,線路經過乙個由p-mos和n-mos管組成的單元電路,這讓gpio引腳具有了推挽和開漏兩種輸出模式。所謂推挽輸出模式,是根據p-mos和n-mos管的工作方式命名的。在該結構單元輸入乙個高電平時,p-mos管導通,n-mos管截止(可以將p-mos當作npn三極體,n-mos當作pnp三極體來看就非常清楚),對外輸出高電平(3.3v)。

在該單元輸入乙個低電平時,p-mos管截止,n-mos管導通, 對外輸出低電平 (0v) 。如果當切換輸入高低電平時,兩個mos管將輪流導通,乙個負責灌電流(電流輸出到負載),乙個負責拉電流(負載電流流向晶元),使其負載能力和開關速度都比普通的方式有很大的提高。下圖為推挽輸出模式的等效電路。

在開漏輸出模式時,不論輸入是高電平還是低電平,p-mos 管總處於關閉狀態。當給這個單元電路輸入低電平時,n-mos 管導通,輸出即為低電平。當輸入高電平時,n-mos 管截止,這個時候引腳狀態既不是高電平,又不是低電平,我們稱之為高阻態。如果想讓引腳輸出高電平,那麼引腳必須外接乙個上拉電阻,由上拉電阻提供高電平。開漏輸出模式等效電路圖如下圖所示。

在開漏輸出模式中還有乙個特點,引腳具有「線與」關係。就是說如果有很多個開漏輸出模式的引腳接在一起,只要有乙個引腳為低電平,其他所有管腳都為低,即把所有引腳連線在一起的這條匯流排拉低了。只有當所有引腳輸出高阻態時這條匯流排的電平才由上拉電阻的 vdd 決定。如果 vdd 連線的是 3.3v,那麼引腳輸出的就是 3.3v,如果 vdd 連線的是 5v,那麼引腳輸出的就是 5v。因此如果想要讓 stm32 管腳輸出 5v,可以選擇開漏輸出模式,然後在外置上拉電阻的電源 vdd 選擇 5v 即可,前提是這個 stm32 引腳是容忍 5v 的。開漏輸出模式一般應用在 i2c、smbus 通訊等需要「線與」功能的匯流排電路中。還可以用在電平不匹配的場合中,就如上面說的輸出 5v 一樣。

推挽輸出模式一般應用在輸出電平為0-3.3v而且需要高速切換開關狀態的場合。除了必須要用開漏輸出模式的場合,我們一般選擇推挽輸出模式。要配置引腳是開漏輸出還是推挽輸出模式可以使用gpiox_crl和gpiox_crh暫存器, 暫存器詳細內容可以參考《stm32f1xx 中文參考手冊》「通用和復用i/o(gpio和afio)」章節。

輸出資料暫存器

前面提到的雙 mos 管結構電路的輸入訊號,是由 gpio「輸出資料暫存器gpiox_odr」提供的, 因此我們通過修改輸出資料暫存器的值就可以修改gpio引腳的輸出電平。而「置位/復位暫存器 gpiox_bsrr」可以通過修改輸出資料暫存器的值從而影響電路的輸出。

復用功能輸出

由於stm32的gpio引腳具有第二功能,因此當使用復用功能的時候,也就是通過其他外設復用功能輸出訊號與gpio資料暫存器一起連線到雙mos管電路的輸入,其中梯形結構是用來選擇使用復用功能還是普通io口功能。例如我們使用usart串列埠通訊時,需要用到某個gpio引腳作為通訊傳送引腳,這時候就可以把該gpio引腳配置成usart串列埠復用功能, 由串列埠外設控制這個腳,傳送資料。

輸入資料暫存器

輸入資料暫存器是由io口經過上下拉電阻、肖特基觸發器引入。當訊號經過觸發器,模擬訊號將變為數碼訊號0或1,然後儲存在輸入資料暫存器中,通過讀取輸入資料暫存器gpiox_idr就可以知道io口的電平狀態。

復用功能輸入

此模式與前面講解的復用功能輸出類似。在復用功能輸入模式時,gpio引腳的訊號傳輸到stm32其他片上外設,

由該外設讀取引腳的狀態。同樣,如我們使用usart串列埠通訊時,需要用到某個gpio引腳作為通訊接收引腳,這個時候就可以把該gpio引腳配置成usart串列埠復用功能, 使usart可以通過該通訊引腳的接收遠端資料。

模擬輸入輸出

當gpio引腳用於adc採集電壓的輸入通道時,用作「模擬輸入」功能,此時訊號是不經過施密特觸發器的, 因為經過施密特觸發器後訊號只有0、1兩種狀態,adc外設要採集到原始的模擬訊號,訊號源輸入必須在施密特觸發器之前。類似地,當gpio引腳用於dac作為模擬電壓輸出通道時,此時作為「模擬輸出」功能,dac的模擬訊號輸出就不經過雙mos管結構了,模擬訊號直接通過管腳輸出。

STM32入門系列 STM32最小系統介紹

stm32最小系統組成 stm32微控制器最小系統,也就是能夠使得微控制器正常執行程式,最少需要連線哪些器件。一般來說,stm32最小系統由四部分組成 stm32微控制器由armcortexm3 匯流排矩陣 外設組成。微控制器開發板能夠做哪些事情是自己的選擇。我們可以製作一款stm32最小系統核心開...

stm32學習筆記 GPIO

2011 03 06 15 10 stm32基本上每個引腳都有8種配置模式 浮空輸入 帶弱上拉輸入 帶弱下拉輸入 模擬輸入 推挽輸出 開漏輸出 復用推挽輸出 復用開漏輸出 通常有5種方式使用某個引腳功能,它們的配置方式如下 1 作為普通gpio輸入 根據需要配置該引腳為浮空輸入 帶弱上拉輸入或帶弱下...

STM32控制GPIO講解

借鑑 借鑑一。gpio簡介 stm32的io口有8中配置方式 輸入浮空輸入gpio in floating 浮空輸入,可以做key識別,rx1 帶上拉輸入gpio ipu io內部上拉電阻輸入 帶下拉輸入gpio ipd io內部下拉電阻輸入 模擬輸入gpio ain 應用adc模擬輸入,或者低功耗...