GPIO(General-Purpose IO ports,通用輸入/輸出接口)模塊是STM32的外設接口的核心部分,用于感知外界信號(輸入模式)和控制外部設備(輸出模式),支持多種工作模式和配置選項。
1、GPIO 基本結構
STM32F407 的每個 GPIO 引腳均可獨立配置,主要特性包括:
- 9 組 GPIO 端口(GPIOA ~ GPIOI),每組最多 16 個引腳(PIN0 ~ PIN15)。
- 每個引腳可配置為輸入、輸出、復用功能或模擬模式。
- 支持多種驅動模式(推挽、開漏)、速度等級和上下拉電阻。
- 支持外部中斷 / 事件觸發。
I/O 端口的基本結構 :
2、GPIO 工作模式
每個引腳可通過 GPIOx_MODER 寄存器配置為以下模式:
/** * @brief GPIO Configuration Mode enumeration */
typedef enum
{ GPIO_Mode_IN = 0x00, /*!< GPIO Input Mode */GPIO_Mode_OUT = 0x01, /*!< GPIO Output Mode */GPIO_Mode_AF = 0x02, /*!< GPIO Alternate function Mode */GPIO_Mode_AN = 0x03 /*!< GPIO Analog Mode */
}GPIOMode_TypeDef;
#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_IN) || ((MODE) == GPIO_Mode_OUT) || \((MODE) == GPIO_Mode_AF)|| ((MODE) == GPIO_Mode_AN))
2.1、輸入模式
2.1.1、浮空輸入(Input Floating)
引腳電平由外部電路決定,無內部上拉 / 下拉。上拉 / 下拉電阻為斷開狀態,施密特觸發器打開,輸出被禁止。輸入浮空模式下,IO 口的電平完全是由外部電路決定的。如果 IO 引腳沒有連接其他的設備,那么檢測其輸入電平是不確定的。
浮空輸入的特點:
- 高阻態:引腳內部無上拉/下拉電阻,電平完全由外部電路決定。
- 靈敏度高:易受外部信號或噪聲影響,需確保外部電路有明確的驅動源。
- 低功耗:無內部電阻電流路徑,適合低功耗場景(需外部電路穩定)。
該模式典型應用場景:
1、外部中斷(EXIT)
- 場景:連接按鍵、傳感器等需要觸發中斷的設備。
- 原因:若外部電路已包含明確的上拉/下拉電阻(如按鍵電路),使用浮空輸入可避免內部電阻的干擾。
2、 通信接口(如 IIC、UART)
- 場景:IIC 的 SDA / SCL 線、UART 的 RX 引腳。
- 原因:IIC 總線需外接上拉電阻,浮空輸入避免內部電阻沖突;UART 接收端有外部設備驅動電平。
3、多設備總線(如 CAN、SPI)
- 場景:總線型通信(如 CAN 總線、SPI 從設備 MISO)
- 原因:總線電平由外部收發器或多主機設備控制,浮空輸入確保無內部干擾。
4、高速數字信號采樣
- 場景:高頻脈沖計數(如編碼器信號、PWM 輸入捕獲)。
- 原因:浮空輸入響應速度快,適合高速信號采集(需外部信號驅動能力強)。
5、模擬信號預處理
- 場景:連接比較器、運放等模擬電路的輸出端。
- 原因:避免內部電阻影響模擬電路輸出的高精度電平。
2.1.2、上拉輸入(Input Pull-up)
內部上拉電阻(約40kΩ)連接到 VDD。 上拉電阻導通,施密特觸發器打開,輸出被禁止。在需要外部上拉電阻的時候,可以使用內部上拉電阻,這樣就可以節省一個外部電阻,但是內部上拉電阻的阻值較大,不適合做電流型驅動。
上拉輸入的特點:
- 默認高電平:當引腳無外部驅動時,內部上拉電阻將電平拉至 VDD(3.3V)。
- 抗干擾能力強:避免引腳懸空導致的電平漂移,較少噪聲影響。
- 簡化外部電路:省去外部上拉電阻,節省 PCB 空間和成本。
該模式典型應用場景:
1、按鍵/開關檢測
- 場景:按鍵一端接地(低電平有效),按下時拉低引腳電平。
- 原理:未按下時,內部上拉電阻使引腳保持高電平;按下時接地,電平變為低。
2、數字信號輸入(無主動驅動高電平)
- 場景:連接開漏輸出的傳感器(如某些紅外模塊)。
- 原理:傳感器只能拉低電平,需上拉電阻提供默認高電平。
3、總線空閑狀態維持
- 場景:單線通信協議(如 1-Wire)或自定義串行總線。
- 原理:總線空閑時由上拉電阻維持高電平,設備通過拉低電平發送數據。
4、電平轉換接口
- 場景:連接 5V 設備(通過電平轉換芯片)。
- 原理:若轉換芯片輸出為開漏模式,需上拉電阻提供 3.3V 高電平。
5、防止未初始化引腳懸空
- 場景:未使用的 GPIO 引腳。
- 原理:配置為上拉輸入,避免懸空引入噪聲或意外電流。
2.1.3、下拉輸入(Input Pull-down)
內部下拉電阻(約40kΩ)連接到 GND。 下拉電阻導通,施密特觸發器打開,輸出被禁止。在需要外部下拉電阻的時候,可以使用內部下拉電阻,這樣也就可以節省一個外部電阻,但是內部下拉電阻的阻值較大,所以不適合做電流型驅動。
下拉輸入的特點:
- 默認低電平:當引腳無外部驅動時,內部下拉電阻將電平拉至 GND(0 V)。
- 抗干擾能力強:避免引腳懸空導致的高電平誤觸發。
- 簡化外部電路:省去外部下拉電阻,節省 PCB 空間和成本。
該模式典型應用場景:
1、高電平有效信號檢測
- 場景:檢測傳感器或模塊的高電平輸出(如紅外避障傳感器、PIR 人體感應模塊)。
- 原理:未觸發時引腳電平被下拉至低電平;觸發時外部設備輸出高電平。
2、總線型通信的從設備選擇
- 場景:SPI 從設備的片選(CS)信號。
- 原理:主設備未選中從設備時,片選線保持低電平(下拉);選中時主設備拉高電平。
3、數字信號防抖動
- 場景:連接機械開關或繼電器觸點。
- 原理:下拉電阻確保開關斷開時引腳為低電平,減少觸點抖動引入的噪聲。
4、電平轉換接口
- 場景:連接 5V 設備的開漏輸出(如某些老式傳感器)。
- 原理:外部設備拉高電平時,通過電平轉換芯片輸出 3.3V 高電平;未激活時下拉至低電平。
5、未使用引腳的穩定處理
- 場景:未連接的 GPIO 引腳。
- 原理:配置為下拉輸入,避免懸空引腳引入噪聲或意外功耗。
2.1.4、模擬輸入(Analog Mode)
上下拉電阻斷開,施密特觸發器關閉,雙 MOS 管也關閉。該模式用于 ADC 采集或 DAC 輸出,或者低功耗下省電。
模擬輸入的特點:
- 禁用數字功能:引腳的數字輸入/輸出電路被斷開,僅保留模擬信號路徑。
- 高精度低噪聲:避免數字電路干擾,提高 ADC/DAC 的采樣精度。
- 無上拉/下拉:內部電阻斷開,信號完全由外部模擬源驅動。
該模式典型應用場景:
1、傳感器信號采集
- 場景:連接模擬輸出傳感器(如溫度、壓力、光照、濕度傳感器)。
- 示例:
(1)溫度傳感器(如 LM35、NTC 熱敏電阻):輸出電壓隨溫度變化。
(2)光敏電阻:電阻值隨光照強度變化&#x