提示:永遠支持免費開源知識文檔,喜歡的點個關注吧!謝謝!
文章目錄
- 一、什么是GPIO?
- 二、GPIO基本結構
- 三、GPIO的輸入輸出模式
- 1、推挽輸出
- 2、開漏輸出
- 3、復用推挽
- 4、復用開漏
- 1、浮空輸入
- 2、上拉輸入
- 3、下拉輸入
- 3、模擬輸入
- 總結
一、什么是GPIO?
GPIO是單片機上的通用輸入輸出端口的簡稱,可以通過軟件來控制其輸入輸出。STM32芯片的GPIO引腳與外部設備連接起來,從而實現與外部通訊、控制以及數據采集的功能。
關于芯片引腳的分類:電源管腳、晶振管腳、復位管腳、下載管腳、BOOT管腳、GPIO管腳。
如下圖(STM32系統板原理圖)中的帶P什么的都是STM32的引腳,其中大部分引腳都是用作GPIO,不過也可以用作其它作用,比如說PA9既可以用作GPIO,也可以用作USART1_TX引腳,具體用作什么需要我們后期自己去配置。
二、GPIO基本結構
如下圖是GPIO的內部電路構成:
沒有學過硬件的同學看到這張圖也不用擔心,王老師帶你們看,首先我們從右向左看,最右邊是不是有兩個二極管,這個是保護二極管,二極管的作用是不是單向導通,那它是怎么起保護作用的呢?我們先來看上面的二極管。
眾所周知,STM32的運行電壓一般是3.3V,有些引腳也能接受5V的電壓,當然,除了某些AD引腳之外,AD是什么?AD就是我們單片機中的一個模數轉換器。現在假設我們輸入一個Vc電壓,Vc是大于STM32的可接受的電壓范圍,此時,我們可以發現上面的那個二極管是接了一個VDD的,VDD是什么?VDD是一般外接了一個3.3V的電壓,好,看到這里我們怎么去看了呢?別著急,我們可以用整體法,如下圖:
我們可以把這個分為兩個部分,第一個是內部的電路,第二個是那個保護二極管,我們可以發現,這兩個部分是不是構成了一個并聯電路呀?并聯電路的特點是什么?電壓相等吧,還有分流,此時,當我們輸入一個VDD時,1部分的電壓就會被2部分的電壓拉低,從而起到了一個保護作用。下面的二極管亦是如此。
三、GPIO的輸入輸出模式
GPIO一共有八種輸入輸出模式,其中有四種輸出模式:推挽輸出、開漏輸出、復用推挽以及復用開漏,四種輸入模式:浮空輸入、上拉輸入、下拉輸入以及模擬輸入。下面我們來一一介紹一下GPIO的各種模式。
1、推挽輸出
如圖黃色部分是推挽輸出的電路,我們從左往右看。輸出嘛,肯定能輸出一個高低電平,但這個是如何在我們寫1的時候輸出高電平,寫0的時候輸出一個低電平的呢?
假設我們現在寫了一個1,1被輸入到輸出數據寄存器,然后被輸入到了輸出控制電路,重點來了,輸出控制電路中有一個反相器,什么是反相器?反相器就是當我們寫1的時候經過反相器輸出的是一個0,當我們寫0的時候經過反相器輸出的是一個1,好,知道這一點之后我們回到剛剛我們寫1。此時經過反相器,兩條支路都輸出了一個0,好,此時我們又要了解P·MOS管和N·MOS管,其中P·MOS管是低電平導通,N·MOS管是高電平導通,P·MOS管接了一個VDD,上面我們說過,VDD是外接了一個3.3V的電壓,此時IO端口連接到P·MOS管,而P·MOS管又連了一個VDD,故此時IO端口就會輸出一個高電平,同理我們寫0的時候N·MOS管導通,而N·MOS管連接了VSS,而VSS是接地的,所以此時我們IO端口輸出一個低電平。
2、開漏輸出
通過上圖我們可以發現,開漏輸出和推挽輸出的電路有所區別,區別就是在開漏輸出中,我們的P·MOS管是沒有參與開漏輸出這整個過程的。所以開漏輸出有一個特點,就是不能輸出一個高電平,當我們寫1的時候開漏輸出是沒有任何輸出的,此時的IO端口狀態我們稱之為高阻態。
3、復用推挽
從上圖我們可以發現,推挽和復用推挽的區別就在于復用推挽沒有經過輸出數據寄存器,而是來自片上外設模塊,什么是片上外設呢?就是GPIO啊,ADC啊,IIC等等一些ST公司拿到ARM公司給的內核之后往上面添加的一些外設設備。好,知道這些之后,其它的就跟推挽輸出差不多了,也能輸出一個高低電平。
4、復用開漏
復用開漏和復用推挽一樣,都是來自片上外設模塊,而且沒有經過輸出數據寄存器,其它的也和普通開漏輸出模式一樣,這里我們也不詳細介紹了。
介紹完輸出模式之后我們來介紹一下輸入模式。
1、浮空輸入
如圖黃色部分就是浮空輸入的電路了,我們可以從右往左看,輸入嘛,也就是外接了一個什么設備,然后IO端口讀取這個外設輸入進來的高低電平,我們看浮空輸入,顧名思義,當我們既沒有輸入高電平也沒有輸入低電平的時候,此時IO端口的狀態是浮空的,在空閑狀態IO端口的電平既不是高電平也不是低電平。
然后這個還經過了一個TTL施密特觸發器,眾所周知,STM32板子是識別TTL信號的,什么是TTL信號呢?就像是0101這種高低電平的信號,如下圖
我們輸入到IO端口的一般是模擬信號,而單片機只識別TTL信號,故我們需要經過一個TTL施密特觸發器來將模擬信號轉化為TTL信號,然后再輸入到輸入數據寄存器中
2、上拉輸入
上拉輸入和浮空輸入的區別就是有一個接了VDD開關的上拉電阻,當我們IO端口沒有輸入任何高低電平的時候IO端口的默認狀態是高電平。
3、下拉輸入
我們可以看到,下拉輸入有一個接了VSS開關的下拉電阻,當我們IO端口沒有輸入任何高低電平的時候IO端口的默認狀態就是低電平。
3、模擬輸入
如圖,模擬輸入和以上三種輸入的最大區別就是沒有經過TTL施密特觸發器,然后直接輸入到片上外設模塊,這個模式我們一般在用到ADC數據采集的時候會把引腳配置成模擬輸入。
總結
GPIO端口一共有八種輸入輸出模式:
其中輸出模式有:
推挽輸出,開漏輸出,復用推挽,復用開漏
輸入模式有:
浮空輸入,上拉輸入,下拉輸入,模擬輸入