嵌入式系統如何使用GPIO
時間:2025-01-13 來源:華清遠見
在嵌入式系統開發的廣闊領域中,GPIO(General Purpose Input/Output,通用輸入輸出)端口的操作占據了核心地位。這些端口不僅是微控制器與外部世界溝通的橋梁,也是實現設備控制、數據采集等功能的基石。以下我們介紹以下在嵌入式系統中如何使用GPIO,特別針對常見的硬件平臺如STM32、ESP32等。
1. 硬件平臺與GPIO結構解析
首先需要深入了解GPIO架構。這通常涉及查閱硬件手冊,了解GPIO端口的寄存器地址、功能定義以及時鐘控制等細節。
以STM32為例,可在硬件手冊中查看到GPIO中關于I/O端口位的基本結構圖。從圖中可以看出GPIO大致有3種功能:輸入(Read)、輸出(Write)和其他(To/from on-chip peripherals,power control and EXIT)。我們就從這3種功能入手來學習GPIO的應用。如下:



2. GPIO引腳模式配置
以STM32為例,其GPIO端口的配置高度依賴于HAL(硬件抽象層)庫,通過該庫可以簡化硬件操作,提高開發效率。
在STM32中,配置GPIO引腳(PB2)輸出模式通常涉及以下步驟:
在STM32中,配置GPIO引腳(PA8)輸入模式通常涉及以下步驟:
在STM32中,配置GPIO引腳外部中斷模式(PA8上升沿中斷)通常涉及以下步驟:



3. 讀取GPIO引腳狀態
在輸入模式下,GPIO引腳的狀態可通過讀取對應寄存器獲取。以下是一個讀取GPIO引腳狀態的函數示例:

3. 寫入GPIO引腳狀態
在輸出模式下,通過寫入特定值到GPIO寄存器可以控制引腳輸出高電平或低電平。以下是一個寫入GPIO引腳狀態的函數示例:

3. 中斷處理函數定義
在EXIT中斷模式下,在中斷觸發時系統會自動調用中斷服務程序。中斷服務程序中會默認使用HAL庫的API去處理中斷。為了讓開發人員能自定義處理功能,在HAL中留出允許開發人員重寫的回調函數API。以下是一個對應PA8引腳的上升沿中斷模式開發代碼:
在EXIT中斷模式下,可以在stm32xxx_it.c中查看到中斷服務程序定義:
重定義HAL對應的EXIT回調函數:
3. 高級配置與優化
時鐘使能與電源管理:確保在配置GPIO之前,相關的時鐘已被使能,并且GPIO引腳連接的外部設備或電路符合微控制器的電源要求。
引腳復用:在STM32等微控制器中,某些引腳支持多種功能復用(如GPIO、UART TX等)。在配置前需明確選擇所需功能,并可能需要配置復用功能寄存器。
中斷配置:對于需要快速響應的外部事件,可通過配置GPIO中斷來實現。STM32 HAL庫提供了相應的API來配置GPIO中斷。
速度與輸出模式:根據應用需求,合理設置GPIO的速度和輸出模式(如推挽輸出、開漏輸出、復用功能輸出等)。


7. 擴展應用
基于GPIO的基礎操作,可以進一步實現更復雜的功能,如PWM(脈沖寬度調制)控制LED亮度、ADC(模擬數字轉換器)讀取傳感器數據、通過UART/SPI/I2C等接口與外部設備通信等。這些功能的實現均離不開對GPIO的深入理解與應用。

