本文絕大部分翻譯自ST的官方用戶手冊 Description of STM32F4 HAL and LL drivers使用前注意開啓GPIO時鐘
__HAL_RCC_GPIOx_CLK_ENABLE()
c++
__HAL_RCC_GPIOx_CLK_ENABLE()
開啓GPIO總線時鐘 HAL_GPIO_Init()
配置GPIO引腳HAL_NVIC_SetPriority()
配置 NVIC IRQ 優先級,再使用HAL_NVIC_EnableIRQ()
開啓 IRQHAL_GPIO_ReadPin()
獲取引腳的電平值HAL_GPIO_WritePin()/HAL_GPIO_TogglePin()
這兩個函數來設置引腳的電平值 HAL_GPIO_LockPin()
來鎖定引腳的配置typedef struct { uint32_t Pin;//所要初始化的引腳序列 GPIO_PIN_x 參見GPIO_pins_define uint32_t Mode;//輸入輸出模式 GPIO_MODE_xxx 參見GPIO_pins_define uint32_t Speed;//輸入輸出速度 GPIO_XXXX_Speed 參見 GPIO_speed——define uint32_t Alternate//要鏈接到該引腳的外設,即複用功能 參見GPIO_Alternate_function_selection }GPIO_InitTypeDef;
用於初始化某個GPIO外設函數
參數說明:ui
GPIOx
所要初始化的GPIO分組,x可選範圍(A…K)(STM32F429)GPIO_Init
GPIO初始化結構體的指針,該結構體定義了一些GPIO引腳的參數用於註銷某個GPIO外設,參數同上翻譯
讀取某個GPIO引腳的值指針
參數說明:code
GPIO_Pin
指定要讀取的引腳序號,參數取值包括: GPIO_PIN_x
,x可選範圍(0…15),具體參考相關宏定義設定某個GPIO引腳的值接口
參數說明:事件
PinState
引腳狀態:ip
GPIO_PIN_RESET
:低電平GPIO_PIN_SET
:高電平切換某個GPIO引腳的狀態,高電平->低電平 或 低電平->高電平ci
鎖定某個GPIO引腳的一些配置寄存器,包括:GPIOx_MODER
GPIOx_OTYPER
GPIOx_OSPEEDR
GPIOx_PUPDR
GPIOx_AFRL
GPIOx_AFRH
。
上述寄存器將沒法被更改直到下次單片機reset
HAL Status:HAL庫函數執行的狀態,包括4種狀態:
typedef enum { HAL_OK = 0x00, HAL_ERROR = 0x01, HAL_BUSY = 0x02, HAL_TIMEOUT = 0x03 }HAL_StatusTyperDef;
GPIO引腳外部中斷處理的公共入口函數,該函數須要在中斷服務函數EXTIx_IRQHandler()
中被調用
該函數已經在HAL庫中聲明並定義好,詳細參見文件stm32f4xx_hal_gpio.c
//stm32f4xx_hal_gpio.c void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) { /* EXTI line interrupt detected */ if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET) { __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); HAL_GPIO_EXTI_Callback(GPIO_Pin); } }
__weak
函數
GPIO引腳外部中斷的回調函數,該函數將在HAL_GPIO_EXTI_IRQHandler()
函數中被調用
用戶經過重構該函數來實現中斷觸發後的邏輯,而且無需考慮重置中斷標識符。
參數說明:
GPIO_Pin
觸發外部中斷的引腳序號(等同與中斷線的序號)
GPIO_AF0_RTC_50Hz GPIO_AF0_MCO GPIO_AF0_TAMPER GPIO_AF0_SWJ GPIO_AF0_TRACE GPIO_AF1_TIM1 GPIO_AF1_TIM2 GPIO_AF2_TIM3 GPIO_AF2_TIM4 GPIO_AF2_TIM5 GPIO_AF3_TIM8 GPIO_AF3_TIM9 GPIO_AF3_TIM10 GPIO_AF3_TIM11 GPIO_AF4_I2C1 GPIO_AF4_I2C2 GPIO_AF4_I2C3 GPIO_AF5_SPI1 GPIO_AF5_SPI2 GPIO_AF5_SPI3 GPIO_AF5_SPI4 GPIO_AF5_SPI5 GPIO_AF5_SPI6 GPIO_AF5_I2S3ext GPIO_AF6_SPI3 GPIO_AF6_I2S2ext GPIO_AF6_SAI1 GPIO_AF7_USART1 GPIO_AF7_USART2 GPIO_AF7_USART3 GPIO_AF7_I2S3ext GPIO_AF8_UART4 GPIO_AF8_UART5 GPIO_AF8_USART6 GPIO_AF8_UART7 GPIO_AF8_UART8 GPIO_AF9_CAN1 GPIO_AF9_CAN2 GPIO_AF9_TIM12 GPIO_AF9_TIM13 GPIO_AF9_TIM14 GPIO_AF9_LTDC GPIO_AF9_QSPI GPIO_AF10_OTG_FS GPIO_AF10_OTG_HS GPIO_AF10_QSPI GPIO_AF11_ETH GPIO_AF12_FMC GPIO_AF12_OTG_HS_FS GPIO_AF12_SDIO GPIO_AF13_DCMI GPIO_AF13_DSI GPIO_AF14_LTDC GPIO_AF15_EVENTOUT
__HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) //檢查指定的中斷線的標誌位 __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) //檢查指定的中斷線的標誌位 __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__) //清除 中斷標誌 __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) //清除 中斷標誌 __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) //生成軟件中斷
宏定義 | 解釋 |
---|---|
GPIO_MODE_INPUT |
浮空輸入 |
GPIO_MODE_OUTPUT_PP |
推輓輸出 |
GPIO_MODE_OUTPUT_OD |
開漏輸出 |
GPIO_MODE_AF_PP |
推輓複用輸出 |
GPIO_MODE_AF_OD |
開漏複用輸出 |
GPIO_MODE_ANALOG |
模擬 |
GPIO_MODE_IT_RISING |
上升沿觸發外部中斷 |
GPIO_MODE_IT_FALLING |
降低沿觸發外部中斷 |
GPIO_MODE_IT_RISING_FALLING |
上升/降低沿觸發外部中斷 |
GPIO_MODE_EVT_RISING |
上升沿觸發外部事件 |
GPIO_MODE_EVT_FALLING |
降低沿觸發外部事件 |
GPIO_MODE_EVT_RISING_FALLING |
上升/降低沿觸發外部事件 |
GPIO_PIN_0 GPIO_PIN_1 GPIO_PIN_2 GPIO_PIN_3 GPIO_PIN_4 GPIO_PIN_5 GPIO_PIN_6 GPIO_PIN_7 GPIO_PIN_8 GPIO_PIN_9 GPIO_PIN_10 GPIO_PIN_11 GPIO_PIN_12 GPIO_PIN_13 GPIO_PIN_14 GPIO_PIN_15 GPIO_PIN_All GPIO_PIN_MASK
宏定義 | 解釋 |
---|---|
GPIO_NOPULL |
不激活上下拉 |
GPIO_PULLUP |
上拉激活 |
GPIO_PULLDOWN |
下拉激活 |
宏定義 | 解釋 |
---|---|
GPIO_SPEED_FREQ_LOW |
工做速度 2MHz |
GPIO_SPEED_FREQ_MEDIUM |
工做速度 12.5MHz~50MHz |
GPIO_SPEED_FREQ_HIGH |
工做速度 50MHz~100MHz |
GPIO_SPEED_FREQ_VERY_HIGH |
工做速度 100MHz~200MHz |