1、GPIO 的8種作業模式
GPIO 的電路是一堆電路,所以需要配置暫存器,來打開對應的開關,來實作不同的功能,

輸入部分:
輸入的信號,不會反向的回流到輸出電路,因為 N-MOS、P-MOS 不會被反向導通,(輸入電路不會影響到輸出電路)
輸入電路內部有兩個電阻:上拉電阻、下拉電阻,
- 上下拉電阻對應兩個開關:這個開關也是通過 GPIO 的配置暫存器,來進行配置打開或者關閉,
- VDD 開關閉合:上拉輸入,(即沒有信號輸入的時候,觸發器里面存盤 1 )
- VSS 開關閉合:下拉輸入,(即沒有信號輸入的時候,觸發器里面存盤 1)
- VDD、VSS 都不導通:浮空輸入,
模擬輸入:不經過觸發器,直接接到片上外設 ADC ,從而進行模數轉換,
觸發器:存盤高低電平的 bit 位,(代表數字輸入)

輸出部分:
N-MOS 管:高電平 導通
P-MOS 管: 低電平 導通
當輸出暫存器為高電平的時候,經過一個非門,傳到輸出控制的時候,就變成了一個低電平,從而將 P-MOS 導通,
電位的提供不是靠資料暫存器,而是通過打開對應的開關,從而利用對應的電源實作,(VDD、VSS)
輸出控制有兩個控制端
- 輸出資料暫存器:代表通用的 GPIO
- 片上外設暫存器:代表 GPIO 的復用功能,
不同模式對應的電路流向:
浮空輸入:

輸入上拉、下拉:


模擬輸入:

開漏輸出:此時的 I/O 埠,既可以做輸入模式、也可以做輸出模式,
- 此時的輸出電平,并不會影響到輸入電路,(與推完輸出不同)
- 因為開漏輸出:VDD 不會起作用,輸出高電平的時候,依靠外面外接一個上拉電阻,
- 所以開漏輸出的高電平,并不會影響到對應的輸入電路,


推挽輸出:
- 此時輸出高電平,是依靠 VDD 來實作的,所以同時會影響到輸入電路,
- 此時輸入電路就無法分辨,高電平是自己輸出的,還是外部輸入的,

2、GPIO 的復用
STM32基本上每個引腳都有8種配置模式:
1)浮空輸入
2)帶弱上拉輸入
3)帶弱下拉輸入
4)模擬輸入
5)推挽輸出
6)開漏輸出
7)復用推挽輸出
8)復用開漏輸出
STM32Fxx內部集成了很多的外設控制器,比如USART、SPI、bxCAN等等,這些外設控制器,也需要通過引腳與外設連接,
復用功能是相對于單片機的引腳而言的,所謂“復用功能”,是指單片機的引腳既可以做普通GPIO使用,也可以作為內部外設控制器的引腳來使用,
比如我們來看看STM32F103xx單片機的PA5引腳,如下圖:

(1)GPIO 支持多種外設的時候,如何區別
!!!:通過外設時鐘是否是能,以及當前 GPIO 處于什么模式,
PA5 的功能:
- 普通GPIO
- SPI1的時鐘(SPI1_SCK)
- DAC的輸出通道1(DAC_OUT1)
- ADC的輸入通道5(ADC12_IN5)
PA5支持的三種外設(SPI1、DAC、ADC)在同一時刻只能選擇一種,
選擇的方法是:開啟相應外設的時鐘,并使其它外設的時鐘保持關閉狀態,
如果PA5被配置為復用功能,但是沒有開啟它支持的任何外設的時鐘,它的輸出是不確定的,
(2)普通推挽輸出、復用推挽輸出的區別
復用推挽輸出和(普通)推挽輸出在輸出的時候均使用兩個MOS管(P-MOS和-MOS),其輸出電路是相同的,
!!!!區別在于控制輸出的信號來源:
- (普通)推挽輸出控制MOS管的信號來自 輸出資料暫存器,
- 復用推挽輸出的控制信號來自單片機的 內置外設控制器(比如SPI1),
下面這張圖,是普通GPIO輸出的引腳配置圖,可以看到其輸出信號來自輸出 資料暫存器(Output data register):

下面這張圖,是選擇復用功能后的引腳配置圖,可以看到其輸出信號來自 芯片內置的外設控制器:

注意:雖然復用模式的控制信號來自內置外設控制器,但是單片機(CPU)依然可以讀取相應的資料,
- 在 復用推挽輸出模式 下,單片機可以通過讀取輸出資料暫存器(Output Data Register)的資料來獲取上次輸出的值;
- 在 復用開漏輸出的模式 下,單片機可以通過讀取輸入資料暫存器(Input Data Register)的值來獲取引腳的狀態,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/401476.html
標籤:其他
