STM32-GPIO詳解

一、GPIO簡介

     GPIO是通用輸入輸出端口的簡稱,簡單來說就是STM32可控制的引腳,STM32芯片的GPIO引腳與外部設備連接起來,從而實現與外部通訊、控制以及數據採集的功能。STM32芯片的GPIO被分成很多組,每組有16個引腳,所有的GPIO引腳都有基本的輸入輸出功能。

     最基本的輸出功能是由STM32控制引腳輸出高、低電平,實現開關控制,如把GPIO引腳接入LED燈,那就可以控制LED燈的亮滅,引腳接入到繼電器或三極管,那就可以通過繼電器或三極管控制外部大功率電路的通斷。

     最基本的輸入功能是檢測外部電平,如把GPIO引腳連接到按鍵,通過電平高低區分按鍵是否被按下。

二、GPIO框圖剖析

                                  

   通過GPIO硬件結構框圖,就可以從整體上深入瞭解GPIO外設及它的各種應用模式,該圖從最右端看起,最右端就是代表STM32芯片引出的GPIO引腳,其它部件都位於芯片內部。

   1、保護二極管及上、下拉電阻

    引腳的兩個保護二極管可以防止引腳外部過高或過低的電壓輸入,當引腳電壓高於V_{DD-FT}時,上方的二極管導通,當引腳電壓低於Vss時,下方的二極管導通,防止不正常電壓引入芯片導致芯片燒燬。

                          

   上下拉電阻,從它的結構我們可以看出,通過上、下拉電阻的開關配置,我們可以控制引腳默認狀態的電壓,開啓上拉的時候引腳電壓爲高電平,開啓下拉的時候引腳電壓爲低電平。也可以設置“既不上拉也不下拉模式”,我們也把這種狀態稱爲浮空模式,配置成這個模式時,直接用電壓表測量其引腳電壓爲1點幾伏,這是個不確定的值。所以一般來說我們都會選擇給引腳設置“上拉模式”或“下拉模式”使它有默認狀態。STM32的內部上拉時“弱上拉”,即通過上拉輸出的電流時很弱的,如要求大電流還是需要外部上拉,通過“上拉/下拉寄存器GPIOx_PUPDR”控制引腳的上、下拉及浮空模式。

                               

   2、P-MOS管和N-MOS管

     GPIO引腳線路經過兩個保護二極管後,向上流向“輸入模式”結構,向下流向“輸出模式”結構。先看輸出模式部分,線路經過一個由P-MOS和N-MOS管組成的單元電路,這個結構使GPIO具有了“推輓輸出”和“開漏輸出”兩種模式。

     所謂的推輓輸出模式,是根據這兩個MOS管的工作方式來命名的。在該結構中輸入高電平時,經過反向後,上方的P-MOS導通,下方的N-MOS關閉,對外輸出高電平;而在該結構中輸入低電平時,經過反向後,N-MOS導通,P-MOS關閉,對外輸出低電平,當引腳高低電平切換時,兩個管子輪流導通,P管負責灌電流,N管負責拉電流,使其負載能力和開關速度都比普通的方式由很大的提高。推輓輸出的低電平爲0伏,高電平爲3.3V,如下圖,它是推輓輸出模式時的等效電路。

                                       

     而在開漏輸出模式時,上方的P-MOS完全不工作。如果我們控制輸出爲0,低電平,則P-MOS管完全關閉,N-MOS管導通,使輸出接地,若控制輸出爲1(它無法直接輸出高電平)時,則P-MOS和N-MOS都關閉,所以引腳既不輸出高電平也不輸出低電平,爲高阻態。爲了正常使用時必須外部接上拉電阻,參考下圖中的等效電路。它具有“線與”特性,也就是說,若有很多個開漏模式引腳連接到一起時,只有當所有引腳都輸出高阻態,才由上拉電阻提供高電平,此電平的電壓爲外部上拉電阻所接的電源的電壓。若其中一個引腳爲低電平,那線路就相當於短路接地,使得整條線路都爲低電平,0伏。

                                    

     推輓輸出模式一般應用在輸出電平0和3.3伏而且需要高速切換開關狀態的場合。在STM32的應用中,除了必須用開漏模式的場合,我們都習慣使用推輓輸出模式。開漏輸出一般應用在I2C、SMBUS通訊等需要“線與”功能的總線電路中。除此之外,還用在電平不匹配的場合,如需要輸出5伏的高電平,就可以在外部接一個上拉電阻,上拉電源爲5伏,並且把GPIO設置爲開漏模式,當輸出高阻態時,由上拉電阻和電源向外輸出5伏電平,如下圖所示。

                                

 3、輸出數據寄存器

      前面提到的雙MOS管結構電路的輸入信號,是由GPIO“輸出數據寄存器“GPIOx_ODR”提供的,因此我們通過修改輸出數據寄存器的值就可以修改GPIO引腳的輸出電平。

                         

而”置位/復位寄存器GPIOx_BSRR“可以通過修改輸出數據寄存器的值從而影響電路的輸出。

                  

 4、複用功能輸出

     “複用功能輸出”中的“複用”是指STM32的其他片上外設對GPIO引腳進行控制,此時GPIO引腳用作該外設的一部分,算第二用途。從其他外設引出來的“複用功能輸出信號”與GPIO本身的數據寄存器都連接到雙MOS管結構中,通過途中梯形結構作爲開關切換選擇。

     例如我們使用USART串口通訊時,需要用到某個GPIO引腳作爲通訊發送引腳,這個時候就可以把該GPIO引腳配置成USART串口複用功能,由串口外設控制該引腳,發送數據。

 5、輸入數據寄存器

     看GPIO結構框圖的上半部分,它時GPIO引腳經過上、下拉電阻後引入的,它連接到施密特觸發器,信號經過觸發器後,模擬信號轉化爲0、1的數字信號,然後存儲再“輸出數據寄存器GPIOx_IDR”中,通過讀取該寄存器就可以瞭解GPIO引腳的電平狀態。

 6、複用功能輸入

     與“複用功能輸出”模式類似,在“複用功能輸出模式”時,GPIO引腳的信號傳輸到STM32其他片上外設,由該外設讀取引腳狀態。

     同樣,如我們使用USART串口通訊時,需要用到某個GPIO引腳作爲通訊接收引腳,這個時候就可以把該GPIO引腳配置成USART串口複用功能,使USART可以通過該通訊引腳接收遠端數據。

 7、模擬輸入輸出

     當GPIO引腳用於ADC採集電壓的輸入通道時,用作“模擬輸入功能”,此時信號時不經過施密特觸發器的,因爲經過施密特觸發器後信號只有0、1兩種狀態,所以ADC外設要採集到原始的模擬信號,信號源輸入必須在施密特觸發器之前。類似的,當GPIO引腳用於DAC作爲模擬電壓輸出通道時,此時作爲“模擬輸出”功能,DAC的模擬信號輸出就不經過雙MOS管結構了,在啊GPIO結構框圖的右下角處,模擬信號直接輸出到引腳。同時,當GPIO用於模擬功能時(包括輸入輸出),引腳的上、下拉電阻是不起作用的。這個時候即使在寄存器配置了上拉或下拉模式,也不會影響到模擬信號的輸入輸出。

三、GPIO工作模式總結

  1、輸入模式(上拉/下拉/浮空)

      在輸入模式時,施密特觸發器打開,輸出被禁止。數據寄存器每隔1個AHB1時鐘週期更新一次,可通過數據寄存器GPIOx_IDR讀取I/O狀態。其中AHB1的時鐘如按默認配置一般爲180MHz。

  2、輸出模式·(推輓/開漏,上拉/下拉)

     在輸出模式中,輸出使能,推完模式時以雙MOS管的方式工作,輸出數據寄存器GPIOx_ODR可控制I/O輸出高低點評。開漏模式時,只有N-MOS工作,輸出數據寄存器可控制I/O輸出高阻態或低電平。輸出速度可配置,有2MHz\25MHz\50MHz\100MHz的選項。此處的輸出速度即I/O支持的高低電平狀態最高切換頻率,支持的頻率越高,功耗越大,如果功耗要求不嚴格,把速度設置成最大即可。

     此時施密特觸發器時打開的,即輸入可用,通過輸入數據寄存器GPIOx_IDR可讀取I/O的實際狀態。

     用於輸出模式時,可使用上拉、下拉或懸空模式。但此時由於輸出模式時引腳電平會收到ODR寄存器的影響,而ODR寄存器對應引腳的位爲0,即引腳初始化後默認輸出低電平,所以在這種情況下,上拉只能起到小幅提高輸出電流能力,但不會影響引腳的默認狀態。

 3、複用功能(推輓/開漏,上拉/下拉)

     複用功能模式中,輸出使能,輸出速度可配置,可工作在開漏及推輓模式,但是輸出信號源於其它外設,輸出數據寄存器GPIOx_ODR無效;輸入可用,通過輸入數據寄存器可獲取I/O實際狀態,但一般直接用外設的寄存器來獲取該數據信號。

     用於複用功能時,可使用上拉、下拉或者浮空模式。同輸出模式,在這種情況下,初始化後引腳默認輸出低電平,上拉只起到小幅提高輸出電流能力,但不會影響引腳的默認狀態。

 4、模擬輸入輸出

     模擬輸入輸出模式中,雙MOS管結構被關閉,施密特觸發器停用,上/下拉也被禁止,其他外設通過模擬通道進行輸入輸出。

     通過GPIO寄存器寫入不同的參數,就可以改變GPIO的用用模式。再GPIO外設中,通過設置“模式寄存器GPIOx_MODER”可配置GPIO的輸出/輸出/複用/模擬模式,“輸出類型寄存器GPIOx_OTYPER”配置推輓/開漏模式,配置“輸出速度寄存器GPIOx_OSPEEDR”可選2/25/50/100MHz輸出速度,“上/下拉寄存器GPIOx_PUPDR”可配置上拉/下拉/浮空模式,各寄存器的具體參數見下表。

                  

 

 

備註:參考《【野火】零死角玩轉STM32—F407霸天虎_V2》讀書筆記!!

 

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章