STM32 GPIO輸入輸出方式詳解

2021-06-21 20:38:11 字數 1816 閱讀 1543

結構圖就不上了

結構圖的上半部分為

輸入模式結構。

接下來就遇到了兩個開關和電阻,與 vdd相連的為上拉電阻,與vss相連

的為下拉電阻。再連線到施密特觸發器就把電壓訊號轉化為 0、1的數碼訊號存

儲在輸入資料暫存器(idr)。我們可以通過設定配置暫存器(crl、crh),控制

這兩個開關,於是就可以得到 gpio的

上拉輸入(gpio_mode_ipu ) 和

下拉輸入

模式(gpio_mode_ipd )了。 

從它的結構我們就可以理解,若 gpio引腳配置為上拉輸入模式,在預設

狀態下(gpio引腳無輸入),讀取得的 gpio引腳資料為 1,高電平。而下拉模

式則相反,在預設狀態下其引腳資料為 0,低電平。  

而 stm32的

浮空輸入模式(gpio_mode_in_floating)在晶元內部既沒有

接上拉,也沒有接下拉電阻,經由觸發器輸入。配置成這個模式直接用電壓表

測量其引腳電壓為 1點幾伏,這是個不確定值。由於其輸入阻抗較大,一般把

這種模式用於標準的通訊協議如 i2c、usart的接收端。

模擬輸入模式(gpio_mode_ain )則關閉了施密特觸發器,不接上、下拉電

阻,經由另一線路把電壓訊號傳送到片上外設模組。如傳送至給 adc模組,由

adc採集電壓訊號。所以使用adc外設的時候,必須設定為模擬輸入模式。 

結構圖的下半部分為

輸出模式結構。 

線路經過乙個由 p-mos和n-mos管組成的單元電路。而所謂

推挽輸出模

式,則是根據其工作方式來命名的。在輸出高電平時,p-mos導通,低電平

時,n-mos管導通。兩個管子輪流導通,乙個負責灌電流,乙個負責拉電流,

使其負載能力和開關速度都比普通的方式有很大的提高。推挽輸出的供電平為

0伏,高電平為 3.3伏。 

在開漏輸出模式時,如果我們控制輸出為 0,低電平,則使 n-mos管導

通,使輸出接地,若控制輸出為 1 (無法直接輸出高電平),則既不輸出高電

平,也不輸出低電平,為高阻態。為正常使用時必須在外部接上乙個上拉電

阻。它具「線與」特性,即很多個開漏模式 引腳連線到一起時,只有當所有引

腳都輸出高阻態,才由上拉電阻提供高電平,此高電平的電壓為外部上拉電阻

所接的電源的電壓。若其中乙個引腳為低電平,那線路就相當於短路接地,使

得整條線路都為低電平,0伏。 

stm32的gpio輸出模式就分為

普通推挽輸出(gpio_mode_out_pp )、普

通開漏輸出 (gpio_mode_out_od)及復用推挽輸出(gpio_mode_af_pp )、復

用開漏輸出(gpio_mode_af_od )。 

普通推挽輸出模式一般應用在輸出電平為 0和3.3伏的場合。而普通開漏

輸出一般應用在電平不匹配的場合,如需要輸出 5伏的高電平,就需要在外部

接乙個上拉電阻,電源為 5伏,把 gpio設定為開漏模式,當輸出高阻態時,

由上拉電阻和電源向外輸出 5伏的電平。

對於相應的復用模式,則是根據 gpio的復用功能來選擇的,如 gpio的引

腳用作串列埠的輸出,則使用

復用推挽輸出模式。如果用在ic、smbus這些需要

線與功能的復用場合,就使用

復用開漏模式。其它不同的復用場合的復用模式

引腳配置將在具體的例子中講解。 

在使用任何一種開漏模式,都需要接上拉電阻。  

備註::

1》gpio設定成輸入狀態就是高阻態?這個還有待確認!

STM32 GPIO的輸入輸出 HAL庫

本文將介紹stm32基於hal庫的gpio使用,利用上文建立好的hal庫工程模板,可以方便的編寫應用程式。我們目標是編寫乙個led燈和按鍵的使用例子,每按下一次按鍵,led的亮滅狀態將進行一次反轉。我們建立 led.h 和 led.c 在工程模板的inc和src資料夾中。該模組 作用是防止在某乙個 ...

STM32 GPIO八種輸入輸出模式

參考 浮空,顧名思義,就相當與此埠在預設情況下什麼都不接,呈高阻態。浮空最大的特點就是電壓的不確定性,它可能是0v,也可能是vcc,還可能是介於兩者之間的某個值 最有可能 將不確定的訊號通過乙個電阻鉗位在高電平。沒有輸入或輸入為高電平時是高電平,輸入為低電平時就是低電平。將不確定的訊號通過乙個電阻鉗...

stm32 GPIO 輸入 按鍵檢測

使能 gpio 埠時鐘 初始化 gpio 目標引腳為輸入模式 浮空輸入 編寫簡單測試程式,檢測按鍵的狀態,實現按鍵控制 led 燈。1.按鍵引腳巨集定義 1 引腳定義 2 define key1 gpio clk rcc apb2periph gpioa 3 define key1 gpio por...