STM32的GPIO工作模式

最近一直在學習STM32,對於技術菜鳥,我爲了方便應用,簡單整理了下它的GPIO的八種工作模式的使用技巧。

當然,首先簡單的分析下各種模式吧。(用我理解的方式來講,不對的地方請多指教)

首先給一張原理圖(出自STM32中文參考手冊v10.0)。

如圖所示,圖的左邊是I/O口,右邊是連接芯片內部。

圖的上半部分是輸入模式。我們從右往左看,發現有有兩個開關和電阻,以及VDD和VSS。這就是所謂的上拉(GPIO_Mode_IPU)和下拉(GPIO_Mode_IPD)輸入模式的區別之處,上面開關接通就是上拉,下面開關接通就是下拉。上拉和下拉的實際應用中的區別是什麼呢?分析電路我們明顯可以看出,當上面開關接通時,也就是所謂的上拉輸入模式,這是VDD給電阻供電,也就是I/O引腳此時是高電平的;同理下拉輸入模式就是引腳空閒狀態是低電平的。這我們就能很好的應用了,當你需要你做的控制系統,平時是高電平就上拉唄,很好理解吧!當然你還要知道,這不是上拉和下拉的全部原理,因爲你看電路圖,輸入還經過肖特基觸發器(也有地方說法是施密特觸發器),其實,就是把電壓的值轉化成0、1二進制值,並存在輸入數據寄存器中,然後就可以讀取數值啦。至於怎麼控制那兩個開關呢?當然是通過寄存器啦,CRL、CRH就是控制這兩個開關的,進行選擇這兩種模式的。

再看看浮空輸入模式(GPIO_Mode_IN_FLOWING),浮空輸入模式從圖中可以看到,是直接接到觸發器的,它電平完全由外界接入的電平決定,這就導致它的電平是不確定的,空閒狀態下大概是1點幾伏。它的特性就是輸入的阻抗比較大。

而模擬輸入模式(GPIO_Mode_AIN),從圖可知,它是直接連接到I/O口上的,沒有接任何東西,這就是它的獨特之處,一來是直接讀取連接的電平值,二來是功耗低。

這些原理各個地方解釋都不同,大家參考就行,我覺得重要的是應用,你太在意原理固然沒錯,但是對初學者來說,會用就是滿足,等以後摸熟了STM32再回頭看原理,就是小菜一碟了。

上拉、下拉你自己按照你設計的需要,空閒時要求高電平就上拉,否則就下拉。浮空一般是作爲按鍵、I2C、USART的接收端。模擬輸入一般是ADC,低功耗時。

圖的下半部分是輸出模式。我們可以看到輸出控制後面接着兩個對稱的MOS管,一個P-MOS,一個N-MOS。這樣連接電路,就是推輓工作模式,輸出高電平時,就是N-MOS導通;輸出低電平時,就是P-MOS導通。兩個管子輪流導通,前者是負責灌電流,後者負責拉電流,使其浮在能力和開關速度都比普通的方式有很大提高。

在開漏輸出模式時,如果輸出低電平,則使N-MOS管導通,是其輸出接地;若輸出爲1,則既不輸出高電平也不輸出低電平,爲高阻態。爲了正常使用,必須外部接一個上拉電阻。它有“線與”特性,即,多個開漏模式引腳相連接到一起時,只有當所有引腳都是輸出高阻態,才由上拉電阻提供高電平,此高電平爲外部上拉電阻所接的電源的電壓。開漏輸出模式一定要接上拉電阻,不然不能正常工作,這是設計時必須要注意的。

普通推輓輸出(GPIO_Mode_Out_PP)模式,一般應用在輸出電平在0-3.3伏的時候。普通開漏輸出(GPIO_Mode_Out_OD)應用在電平不匹配的時候。複用推輓輸出(GPIO_Mode_AF_PP)模式一般用在串口輸出,如I2C的SCL、SDA。複用開漏輸出(GPIO_Mode_AF_OD)模式用在需要線與的時候,如IC、SMBUS、TX1、MOSI、MISO、SCK、SS。

好吧,大致就是這麼多吧,我覺得當你要用到的時候,你直接就看是上面的那種就好了,然後直接用,不用再去看原理,分析到底要用什麼,直接這樣用,對初學者來說應該很簡單吧。

發佈了37 篇原創文章 · 獲贊 14 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章