STM32 GPIO的8種工作模式及相關配置暫存器

whalefall發表於2018-04-27

GPIO八種工作模式

四種輸入: 

GPIO_Mode_IPU(上拉輸入) 
GPIO_Mode_IPD(下拉輸入) 

原理: 經過上拉開關和下拉開關的連線,再經過觸發器轉化為0,1的數字訊號,儲存到資料暫存器中,然後我們就可以通過配置暫存器CRL,CRH控制這兩個開關。 
用法: 若GPIO引腳配置為上拉輸入模式,在預設狀態下(GPIO引腳無輸入),取得的GPIO引腳資料為1,既高電平. 而下拉輸入模式則是相反的,在預設狀態下其引腳資料為0,低電平.

GPIO_Mode_IN_FLOATING(浮空輸入) 
原理: 不接上拉和下拉開關,直接經由觸發器輸入. 
用法: 若配置成這個模式可以用電錶測量其引腳電壓是1點幾伏(不確定的值).由於輸入阻抗較大,一般把這種模式用於標準的通訊協議例如:I2C,USART的接收端.

GPIO_Mode_AIN(模擬輸入)
原理: 直接關閉觸發器,不接上拉和下拉開關,由另一路開關傳至片上外設模組. 
用法: 例如傳送至ADC模組時,就由ADC採集電壓訊號.(使用ADC外設的時候,必須是設定為模擬輸入模式).

四種輸出: 
GPIO_Mode_Out_PP(普通推輓輸出) 
原理: 經過一個由P_MOS和N_MOS管組成的單元電路.輸出高電平(3.3V)時,P_MOS導通,低電平(0V)時,N_MOS導通(兩個管子輪流導通,一個進電流,一個拉電流.這樣它的負載能力和開關速度都比普通方式有大的提高) 
用法: 一般都是應用在輸出電平為0和3.3V的場合.

GPIO_Mode_Out_OD(普通開漏輸出) 
原理: 
在輸出0時,既高電平,則N_MOS管導通,使輸出接地.在輸出1時,則不輸出高電平也不輸出低電平(無法輸出高電平,本身為高阻態).所以在使用的時候,必須在外部接上一個上拉電阻並且開漏輸出模式具有”線與”的特性,既有很多開漏模式的引腳接到一起時,只有在所有引腳都處於高阻態的時候,才會輸出高電平.(電壓是外部上拉電阻所接電源的電壓).只要其中一個引腳是低電平,那麼整個線路都等於短路接地(低電平),電壓是0V.(只要是開漏輸出模式,都必須接上拉電阻) 
用法: 
一般應用在電平不匹配的場合,如需要輸出5V的高電平,就需要在外部接上一個上拉電阻,電源為5V.這時在輸出高組態的時候,就會由上拉電阻和電源向外輸出5V.

GPIO_Mode_AF_PP(複用推輓輸出) 
GPIO_Mode_AF_OD(複用開漏輸出) 

原理: 同上. 
用法: 對於複用模式,一般都是由GPIO的複用功能來選擇的(比如一個IO引腳可以做一般輸入輸出,同時還是串列埠輸出腳,這就是複用) 例如:GPIO的引腳用作串列埠的輸出,就可以使用複用推輓輸出模式了.如果是用在I2C,SMBUS這些需要線與功能的,就使用複用開漏輸出

附上工作模式原理圖,想具體瞭解的朋友可以看著原理圖對照我上面所說的,一步步看,最右邊的為IO引腳


GPIO相關配置暫存器

每組GPIO埠的暫存器包括:

  • 一個埠模式暫存器(GPIOx_MODER)
  • 一個埠輸出型別暫存器(GPIOx_OTYPER)
  • 一個埠輸出速度暫存器(GPIOx_OSPEEDR)
  • 一個埠上拉下拉暫存器(GPIOx_PUPDR)
  • 一個埠輸入資料暫存器(GPIOx_IDR)
  • 一個埠輸出資料暫存器(GPIOx_ODR)
  • 一個埠置位/復位暫存器(GPIOx_BSRR)
  • 一個埠配置鎖存暫存器(GPIOx_LCKR)
  • 兩個復位功能暫存器(低位GPIOx_AFRL & GPIOx_AFRH)

如果配置一個IO口需要2個位,那麼剛好32位暫存器配置一組IO口16個IO口
如果配置一個IO口只需要1個位,一般高16位保留
BSRR暫存器32位分為低16位BSRRL和高16位BSRRH,BSRRL配置一組IO口的16個IO口的置位狀態(1),BSRRH配置復位狀態(0)。

相關文章