GPIO 的電路是一堆電路,所以需要設定暫存器,來開啟對應的開關,來實現不同的功能。
輸入部分:
輸入的訊號,不會反向的迴流到輸出電路,因為 N-MOS、P-MOS 不會被反向導通。(輸入電路不會影響到輸出電路)
輸入電路內部有兩個電阻:上拉電阻、下拉電阻。
模擬輸入:不經過觸發器,直接接到片上外設 ADC ,從而進行模數轉換。
觸發器:儲存高低電平的 bit 位。(代表數位輸入)
輸出部分:
N-MOS 管:高電平 導通
P-MOS 管: 低電平 導通
當輸出暫存器為高電平的時候,經過一個非門,傳到輸出控制的時候,就變成了一個低電平,從而將 P-MOS 導通。
電位的提供不是靠資料暫存器,而是通過開啟對應的開關,從而利用對應的電源實現。(VDD、VSS)
輸出控制有兩個控制端
不同模式對應的電路流向:
浮空輸入:
輸入上拉、下拉:
模擬輸入:
開漏輸出:此時的 I/O 埠,既可以做輸入模式、也可以做輸出模式。
推輓輸出:
STM32基本上每個引腳都有8種設定模式:
1)浮空輸入
2)帶弱上拉輸入
3)帶弱下拉輸入
4)模擬輸入
5)推輓輸出
6)開漏輸出
7)複用推輓輸出
8)複用開漏輸出
STM32Fxx內部整合了很多的外設控制器,比如USART、SPI、bxCAN等等,這些外設控制器,也需要通過引腳與外設連線。
複用功能是相對於微控制器的引腳而言的。所謂「複用功能」,是指微控制器的引腳既可以做普通GPIO使用,也可以作為內部外設控制器的引腳來使用。
比如我們來看看STM32F103xx微控制器的PA5引腳,如下圖:
!!!:通過外設時鐘是否是能,以及當前 GPIO 處於什麼模式。
PA5 的功能:
PA5支援的三種外設(SPI1、DAC、ADC)在同一時刻只能選擇一種。
選擇的方法是:開啟相應外設的時鐘,並使其它外設的時鐘保持關閉狀態。
如果PA5被設定為複用功能,但是沒有開啟它支援的任何外設的時鐘,它的輸出是不確定的。
複用推輓輸出和(普通)推輓輸出在輸出的時候均使用兩個MOS管(P-MOS和-MOS),其輸出電路是相同的。
!!!!區別在於控制輸出的訊號來源:
下面這張圖,是普通GPIO輸出的引腳設定圖,可以看到其輸出訊號來自輸出 資料暫存器(Output data register):
下面這張圖,是選擇複用功能後的引腳設定圖,可以看到其輸出訊號來自 晶片內建的外設控制器:
注意:雖然複用模式的控制訊號來自內建外設控制器,但是微控制器(CPU)依然可以讀取相應的資料。