GPIO的8種工作方式
4種輸入模式
浮空輸入
上拉輸入
下拉輸入
模擬輸入
4種輸出模式
開漏輸出
複用開漏輸出
推輓輸出
複用推輓輸出
3種最大輸出速度
2MHz
10MHz
50MHz
浮空輸入模式
1) 外部通過IO口輸入電平,外部電平通過上下拉部分(浮空模式下都關閉,既無
上拉也無下拉電阻)
2) 傳輸到施密特觸發器(此時施密特觸發器爲打開狀態)
施密特觸發器作用:
1. 波形變換 可將三角波、正弦波等變成矩形波。
2. 脈衝波的整形 數字系統中,矩形脈衝在傳輸中經常發生波形畸變,出現上升沿和下降沿不理想的情況,可用施密特觸發器整形後,獲得較理想的矩形脈衝。
3. 脈衝鑑幅 幅度不同、不規則的脈衝信號施加到施密特觸發器的輸入端時,能選擇幅度大於欲設值的脈衝信號進行輸出。
3) 繼續傳輸到輸入數據寄存器IDR
4) CPU通過讀輸入數據寄存器IDR實現讀取外部輸入電平值
5) 在輸入浮空模式下可以讀取外部輸入電平
6) 由於浮空輸入一般多用於外部按鍵輸入,有的理解爲,浮空輸入狀態下,IO的電平狀態是不確定的,完全由外部輸入決定,如果在該引腳懸空的情況下,讀取該端口的電平是不確定的。
上拉輸入模式
在沒有信號輸入的時候,上拉電阻能使讀取input值保持爲高,而下拉電阻正是相反。有些傳感器等元氣件,他們的信號輸出有效時候會輸出一個高電平(或者低電平),無效時候不輸出,爲開路。此時我們就必須用上拉電阻(或下拉電阻)。I2S時下拉輸入,其它都是上拉輸入。
和輸入浮空模式相比較,不同之處在於內部有一個上拉電阻連接到VDD(輸入上拉模式下,上拉電阻開關接通,阻值約30-50K)。
外部輸入通過上拉電阻,施密特觸發器存入輸入數據寄存器IDR,被CPU讀取。
輸入下拉模式
和輸入浮空模式相比較,不同之處在於內部有一個下拉電阻連接到VSS(輸入下拉模式下,下拉電阻開關接通,阻值約30-50K)
外部輸入通過下拉電阻,施密特觸發器存入輸入數據寄存器IDR,被CPU讀取
輸入模擬模式
1.上拉和下拉部分均爲關閉狀態(AD轉換-模擬量轉換爲數字量)
2.施密特觸發器爲截止狀態
3.通過模擬輸入通道輸入到CPU
4.IO口外部電壓爲模擬量(電壓形式非電平形式),作爲模擬輸入範圍一般爲0~3.3V
開漏輸出模式
1,CPU寫入 位設置/清除寄存器BSRR,映射到輸出數據寄存器ODR
2,連通到輸出控制電路(也就是ODR的電平)
3,ODR電平通過輸出控制電路進入N-MOS管
-ODR輸出1:
N-MOS截止,IO端口電平不會由ODR輸出決定,而由外部上拉/下拉決定
在輸出狀態下,輸出的電平可以被讀取,數據存入輸入數據寄存器,由CPU讀取,實現CPU讀取輸出電平。
所以,當N-MOS截止時,如果讀取到輸出電平爲1,不一定是我們輸出的1,有可能是外部上拉產生的1。
-ODR輸出0:
N-MOS開啓,IO端口電平被N-MOS管拉倒VSS,使IO輸出低電平
此時輸出的低電平同樣可以被CPU讀取到。
開漏複用輸出模式
與開漏輸出模式唯一的區別在於輸出控制電路之前電平的來源
開漏輸出模式的輸出電平是由CPU寫入輸出數據寄存器控制的
開漏推輓輸出模式的輸出電平是由複用功能外設輸出決定的
其他與開漏輸出模式相似:
控制電路輸出爲1:N-MOS截止,IO口電平由外部上拉/下拉決定
控制電路輸出爲0:N-MOS開啓,IO口輸出低電平
推輓輸出模式
與開漏輸出相比較:
輸出控制寄存器部分相同
輸出驅動器部分加入了P-MOS管部分
當輸出控制電路輸出1時:
P-MOS管導通N-MOS管截止,被上拉到高電平,IO口輸出爲高電平1
當輸出控制電路輸出0時:
P-MOS管截止N-MOS管導通,被下拉到低電平,IO口輸出爲低電平0
同時IO口輸出的電平可以通過輸入電路讀取
複用推輓輸出模式
與推輓輸出模式唯一的區別在於輸出控制電路之前電平的來源
開漏輸出模式的輸出電平是由CPU寫入輸出數據寄存器控制的
開漏推輓輸出模式的輸出電平是由複用功能外設輸出決定的
推輓輸出:
可以輸出高,低電平,連接數字器件; 推輓結構一般是指兩個三極管分別受兩互補信號的控制,總是在一個三極管導通的時候另一個截止。高低電平由IC的電源低定。
推輓電路是兩個參數相同的三極管或MOSFET,以推輓方式存在於電路中,各負責正負半周的波形放大任務,電路工作時,兩隻對稱的功率開關管每次只有一個導通,所以導通損耗小、效率高。輸出既可以向負載灌電流,也可以從負載抽取電流。推拉式輸出級既提高電路的負載能力,又提高開關速度。
詳細理解:
推輓放大器的輸出級有兩個“臂”(兩組放大元件),一個“臂”的電流增加時,另一個“臂”的電流則減小,二者的狀態輪流轉換。對負載而言,好像是一個“臂”在推,一個“臂”在拉,共同完成電流輸出任務。當輸出高電平時,也就是下級負載門輸入高電平時,輸出端的電流將是下級門從本級電源經VT3拉出。這樣一來,輸出高低電平時,VT3 一路和 VT5 一路將交替工作,從而減低了功耗,提高了每個管的承受能力。又由於不論走哪一路,管子導通電阻都很小,使RC常數很小,轉變速度很快。因此,推拉式輸出級既提高電路的負載能力,又提高開關速度。
推輓輸出和開漏輸出的區別:
推輓輸出:可以輸出強高/強低電平,可以連接數字器件
開漏輸出:只能輸出強低電平(高電平需要依靠外部上拉電子拉高),適合做電流型驅動,吸收電流能力較強(20ma之內)在STM32中選用IO模式設置推輓模式,只能是輸出模式,而輸出高低電平的驅動電流都很大。即可作爲輸出,也可作爲輸入。作輸出時,要輸出高電平,需要外加上拉電阻。作輸入時,要求處理高電平狀態,才能讀外部引腳。
GPIO配置情況
(1) 浮空輸入_IN_FLOATING ——浮空輸入,可以做KEY識別,RX1
(2) 帶上拉輸入_IPU——IO內部上拉電阻輸入
(3) 帶下拉輸入_IPD—— IO內部下拉電阻輸入
(4) 模擬輸入_AIN ——應用ADC模擬輸入,或者低功耗下省電
(5) 開漏輸出_OUT_OD ——IO輸出0接GND,IO輸出1,懸空,需要外接上拉電阻,才能實現輸出高電平。當輸出爲1時,IO口的狀態由上拉電阻拉高電平,但由於是開漏輸出模式,這樣IO口也就可以由外部電路改變爲低電平或不變。可以讀IO輸入電平變化,實現C51的IO雙向功能
(6)推輓輸出_OUT_PP ——IO輸出0-接GND, IO輸出1 -接VCC,讀輸入值是未知的
(7)複用功能的推輓輸出_AF_PP ——片內外設功能(I2C的SCL,SDA)
(8)複用功能的開漏輸出_AF_OD——片內外設功能(TX1,MOSI,MISO.SCK.SS)