| 1 | /**
|
|---|
| 2 | ******************************************************************************
|
|---|
| 3 | * @file stm32f4xx_hal_gpio.h
|
|---|
| 4 | * @author MCD Application Team
|
|---|
| 5 | * @brief Header file of GPIO HAL module.
|
|---|
| 6 | ******************************************************************************
|
|---|
| 7 | * @attention
|
|---|
| 8 | *
|
|---|
| 9 | * <h2><center>© Copyright (c) 2017 STMicroelectronics.
|
|---|
| 10 | * All rights reserved.</center></h2>
|
|---|
| 11 | *
|
|---|
| 12 | * This software component is licensed by ST under BSD 3-Clause license,
|
|---|
| 13 | * the "License"; You may not use this file except in compliance with the
|
|---|
| 14 | * License. You may obtain a copy of the License at:
|
|---|
| 15 | * opensource.org/licenses/BSD-3-Clause
|
|---|
| 16 | *
|
|---|
| 17 | ******************************************************************************
|
|---|
| 18 | */
|
|---|
| 19 |
|
|---|
| 20 | /* Define to prevent recursive inclusion -------------------------------------*/
|
|---|
| 21 | #ifndef __STM32F4xx_HAL_GPIO_H
|
|---|
| 22 | #define __STM32F4xx_HAL_GPIO_H
|
|---|
| 23 |
|
|---|
| 24 | #ifdef __cplusplus
|
|---|
| 25 | extern "C" {
|
|---|
| 26 | #endif
|
|---|
| 27 |
|
|---|
| 28 | /* Includes ------------------------------------------------------------------*/
|
|---|
| 29 | #include "stm32f4xx_hal_def.h"
|
|---|
| 30 |
|
|---|
| 31 | /** @addtogroup STM32F4xx_HAL_Driver
|
|---|
| 32 | * @{
|
|---|
| 33 | */
|
|---|
| 34 |
|
|---|
| 35 | /** @addtogroup GPIO
|
|---|
| 36 | * @{
|
|---|
| 37 | */
|
|---|
| 38 |
|
|---|
| 39 | /* Exported types ------------------------------------------------------------*/
|
|---|
| 40 | /** @defgroup GPIO_Exported_Types GPIO Exported Types
|
|---|
| 41 | * @{
|
|---|
| 42 | */
|
|---|
| 43 |
|
|---|
| 44 | /**
|
|---|
| 45 | * @brief GPIO Init structure definition
|
|---|
| 46 | */
|
|---|
| 47 | typedef struct
|
|---|
| 48 | {
|
|---|
| 49 | uint32_t Pin; /*!< Specifies the GPIO pins to be configured.
|
|---|
| 50 | This parameter can be any value of @ref GPIO_pins_define */
|
|---|
| 51 |
|
|---|
| 52 | uint32_t Mode; /*!< Specifies the operating mode for the selected pins.
|
|---|
| 53 | This parameter can be a value of @ref GPIO_mode_define */
|
|---|
| 54 |
|
|---|
| 55 | uint32_t Pull; /*!< Specifies the Pull-up or Pull-Down activation for the selected pins.
|
|---|
| 56 | This parameter can be a value of @ref GPIO_pull_define */
|
|---|
| 57 |
|
|---|
| 58 | uint32_t Speed; /*!< Specifies the speed for the selected pins.
|
|---|
| 59 | This parameter can be a value of @ref GPIO_speed_define */
|
|---|
| 60 |
|
|---|
| 61 | uint32_t Alternate; /*!< Peripheral to be connected to the selected pins.
|
|---|
| 62 | This parameter can be a value of @ref GPIO_Alternate_function_selection */
|
|---|
| 63 | }GPIO_InitTypeDef;
|
|---|
| 64 |
|
|---|
| 65 | /**
|
|---|
| 66 | * @brief GPIO Bit SET and Bit RESET enumeration
|
|---|
| 67 | */
|
|---|
| 68 | typedef enum
|
|---|
| 69 | {
|
|---|
| 70 | GPIO_PIN_RESET = 0,
|
|---|
| 71 | GPIO_PIN_SET
|
|---|
| 72 | }GPIO_PinState;
|
|---|
| 73 | /**
|
|---|
| 74 | * @}
|
|---|
| 75 | */
|
|---|
| 76 |
|
|---|
| 77 | /* Exported constants --------------------------------------------------------*/
|
|---|
| 78 |
|
|---|
| 79 | /** @defgroup GPIO_Exported_Constants GPIO Exported Constants
|
|---|
| 80 | * @{
|
|---|
| 81 | */
|
|---|
| 82 |
|
|---|
| 83 | /** @defgroup GPIO_pins_define GPIO pins define
|
|---|
| 84 | * @{
|
|---|
| 85 | */
|
|---|
| 86 | #define GPIO_PIN_0 ((uint16_t)0x0001) /* Pin 0 selected */
|
|---|
| 87 | #define GPIO_PIN_1 ((uint16_t)0x0002) /* Pin 1 selected */
|
|---|
| 88 | #define GPIO_PIN_2 ((uint16_t)0x0004) /* Pin 2 selected */
|
|---|
| 89 | #define GPIO_PIN_3 ((uint16_t)0x0008) /* Pin 3 selected */
|
|---|
| 90 | #define GPIO_PIN_4 ((uint16_t)0x0010) /* Pin 4 selected */
|
|---|
| 91 | #define GPIO_PIN_5 ((uint16_t)0x0020) /* Pin 5 selected */
|
|---|
| 92 | #define GPIO_PIN_6 ((uint16_t)0x0040) /* Pin 6 selected */
|
|---|
| 93 | #define GPIO_PIN_7 ((uint16_t)0x0080) /* Pin 7 selected */
|
|---|
| 94 | #define GPIO_PIN_8 ((uint16_t)0x0100) /* Pin 8 selected */
|
|---|
| 95 | #define GPIO_PIN_9 ((uint16_t)0x0200) /* Pin 9 selected */
|
|---|
| 96 | #define GPIO_PIN_10 ((uint16_t)0x0400) /* Pin 10 selected */
|
|---|
| 97 | #define GPIO_PIN_11 ((uint16_t)0x0800) /* Pin 11 selected */
|
|---|
| 98 | #define GPIO_PIN_12 ((uint16_t)0x1000) /* Pin 12 selected */
|
|---|
| 99 | #define GPIO_PIN_13 ((uint16_t)0x2000) /* Pin 13 selected */
|
|---|
| 100 | #define GPIO_PIN_14 ((uint16_t)0x4000) /* Pin 14 selected */
|
|---|
| 101 | #define GPIO_PIN_15 ((uint16_t)0x8000) /* Pin 15 selected */
|
|---|
| 102 | #define GPIO_PIN_All ((uint16_t)0xFFFF) /* All pins selected */
|
|---|
| 103 |
|
|---|
| 104 | #define GPIO_PIN_MASK 0x0000FFFFU /* PIN mask for assert test */
|
|---|
| 105 | /**
|
|---|
| 106 | * @}
|
|---|
| 107 | */
|
|---|
| 108 |
|
|---|
| 109 | /** @defgroup GPIO_mode_define GPIO mode define
|
|---|
| 110 | * @brief GPIO Configuration Mode
|
|---|
| 111 | * Elements values convention: 0xX0yz00YZ
|
|---|
| 112 | * - X : GPIO mode or EXTI Mode
|
|---|
| 113 | * - y : External IT or Event trigger detection
|
|---|
| 114 | * - z : IO configuration on External IT or Event
|
|---|
| 115 | * - Y : Output type (Push Pull or Open Drain)
|
|---|
| 116 | * - Z : IO Direction mode (Input, Output, Alternate or Analog)
|
|---|
| 117 | * @{
|
|---|
| 118 | */
|
|---|
| 119 | #define GPIO_MODE_INPUT MODE_INPUT /*!< Input Floating Mode */
|
|---|
| 120 | #define GPIO_MODE_OUTPUT_PP (MODE_PP | MODE_OUTPUT) /*!< Output Push Pull Mode */
|
|---|
| 121 | #define GPIO_MODE_OUTPUT_OD (MODE_OD | MODE_OUTPUT) /*!< Output Open Drain Mode */
|
|---|
| 122 | #define GPIO_MODE_AF_PP (MODE_PP | MODE_AF) /*!< Alternate Function Push Pull Mode */
|
|---|
| 123 | #define GPIO_MODE_AF_OD (MODE_OD | MODE_AF) /*!< Alternate Function Open Drain Mode */
|
|---|
| 124 |
|
|---|
| 125 | #define GPIO_MODE_ANALOG MODE_ANALOG /*!< Analog Mode */
|
|---|
| 126 |
|
|---|
| 127 | #define GPIO_MODE_IT_RISING (EXTI_MODE | GPIO_MODE_IT | RISING_EDGE) /*!< External Interrupt Mode with Rising edge trigger detection */
|
|---|
| 128 | #define GPIO_MODE_IT_FALLING (EXTI_MODE | GPIO_MODE_IT | FALLING_EDGE) /*!< External Interrupt Mode with Falling edge trigger detection */
|
|---|
| 129 | #define GPIO_MODE_IT_RISING_FALLING (EXTI_MODE | GPIO_MODE_IT | RISING_EDGE | FALLING_EDGE) /*!< External Interrupt Mode with Rising/Falling edge trigger detection */
|
|---|
| 130 |
|
|---|
| 131 | #define GPIO_MODE_EVT_RISING (EXTI_MODE | GPIO_MODE_EVT | RISING_EDGE) /*!< External Event Mode with Rising edge trigger detection */
|
|---|
| 132 | #define GPIO_MODE_EVT_FALLING (EXTI_MODE | GPIO_MODE_EVT | FALLING_EDGE) /*!< External Event Mode with Falling edge trigger detection */
|
|---|
| 133 | #define GPIO_MODE_EVT_RISING_FALLING (EXTI_MODE | GPIO_MODE_EVT | RISING_EDGE | FALLING_EDGE) /*!< External Event Mode with Rising/Falling edge trigger detection */
|
|---|
| 134 |
|
|---|
| 135 | /**
|
|---|
| 136 | * @}
|
|---|
| 137 | */
|
|---|
| 138 |
|
|---|
| 139 | /** @defgroup GPIO_speed_define GPIO speed define
|
|---|
| 140 | * @brief GPIO Output Maximum frequency
|
|---|
| 141 | * @{
|
|---|
| 142 | */
|
|---|
| 143 | #define GPIO_SPEED_FREQ_LOW 0x00000000U /*!< IO works at 2 MHz, please refer to the product datasheet */
|
|---|
| 144 | #define GPIO_SPEED_FREQ_MEDIUM 0x00000001U /*!< range 12,5 MHz to 50 MHz, please refer to the product datasheet */
|
|---|
| 145 | #define GPIO_SPEED_FREQ_HIGH 0x00000002U /*!< range 25 MHz to 100 MHz, please refer to the product datasheet */
|
|---|
| 146 | #define GPIO_SPEED_FREQ_VERY_HIGH 0x00000003U /*!< range 50 MHz to 200 MHz, please refer to the product datasheet */
|
|---|
| 147 | /**
|
|---|
| 148 | * @}
|
|---|
| 149 | */
|
|---|
| 150 |
|
|---|
| 151 | /** @defgroup GPIO_pull_define GPIO pull define
|
|---|
| 152 | * @brief GPIO Pull-Up or Pull-Down Activation
|
|---|
| 153 | * @{
|
|---|
| 154 | */
|
|---|
| 155 | #define GPIO_NOPULL 0x00000000U /*!< No Pull-up or Pull-down activation */
|
|---|
| 156 | #define GPIO_PULLUP 0x00000001U /*!< Pull-up activation */
|
|---|
| 157 | #define GPIO_PULLDOWN 0x00000002U /*!< Pull-down activation */
|
|---|
| 158 | /**
|
|---|
| 159 | * @}
|
|---|
| 160 | */
|
|---|
| 161 |
|
|---|
| 162 | /**
|
|---|
| 163 | * @}
|
|---|
| 164 | */
|
|---|
| 165 |
|
|---|
| 166 | /* Exported macro ------------------------------------------------------------*/
|
|---|
| 167 | /** @defgroup GPIO_Exported_Macros GPIO Exported Macros
|
|---|
| 168 | * @{
|
|---|
| 169 | */
|
|---|
| 170 |
|
|---|
| 171 | /**
|
|---|
| 172 | * @brief Checks whether the specified EXTI line flag is set or not.
|
|---|
| 173 | * @param __EXTI_LINE__ specifies the EXTI line flag to check.
|
|---|
| 174 | * This parameter can be GPIO_PIN_x where x can be(0..15)
|
|---|
| 175 | * @retval The new state of __EXTI_LINE__ (SET or RESET).
|
|---|
| 176 | */
|
|---|
| 177 | #define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__))
|
|---|
| 178 |
|
|---|
| 179 | /**
|
|---|
| 180 | * @brief Clears the EXTI's line pending flags.
|
|---|
| 181 | * @param __EXTI_LINE__ specifies the EXTI lines flags to clear.
|
|---|
| 182 | * This parameter can be any combination of GPIO_PIN_x where x can be (0..15)
|
|---|
| 183 | * @retval None
|
|---|
| 184 | */
|
|---|
| 185 | #define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__))
|
|---|
| 186 |
|
|---|
| 187 | /**
|
|---|
| 188 | * @brief Checks whether the specified EXTI line is asserted or not.
|
|---|
| 189 | * @param __EXTI_LINE__ specifies the EXTI line to check.
|
|---|
| 190 | * This parameter can be GPIO_PIN_x where x can be(0..15)
|
|---|
| 191 | * @retval The new state of __EXTI_LINE__ (SET or RESET).
|
|---|
| 192 | */
|
|---|
| 193 | #define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__))
|
|---|
| 194 |
|
|---|
| 195 | /**
|
|---|
| 196 | * @brief Clears the EXTI's line pending bits.
|
|---|
| 197 | * @param __EXTI_LINE__ specifies the EXTI lines to clear.
|
|---|
| 198 | * This parameter can be any combination of GPIO_PIN_x where x can be (0..15)
|
|---|
| 199 | * @retval None
|
|---|
| 200 | */
|
|---|
| 201 | #define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__))
|
|---|
| 202 |
|
|---|
| 203 | /**
|
|---|
| 204 | * @brief Generates a Software interrupt on selected EXTI line.
|
|---|
| 205 | * @param __EXTI_LINE__ specifies the EXTI line to check.
|
|---|
| 206 | * This parameter can be GPIO_PIN_x where x can be(0..15)
|
|---|
| 207 | * @retval None
|
|---|
| 208 | */
|
|---|
| 209 | #define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER |= (__EXTI_LINE__))
|
|---|
| 210 | /**
|
|---|
| 211 | * @}
|
|---|
| 212 | */
|
|---|
| 213 |
|
|---|
| 214 | /* Include GPIO HAL Extension module */
|
|---|
| 215 | #include "stm32f4xx_hal_gpio_ex.h"
|
|---|
| 216 |
|
|---|
| 217 | /* Exported functions --------------------------------------------------------*/
|
|---|
| 218 | /** @addtogroup GPIO_Exported_Functions
|
|---|
| 219 | * @{
|
|---|
| 220 | */
|
|---|
| 221 |
|
|---|
| 222 | /** @addtogroup GPIO_Exported_Functions_Group1
|
|---|
| 223 | * @{
|
|---|
| 224 | */
|
|---|
| 225 | /* Initialization and de-initialization functions *****************************/
|
|---|
| 226 | void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);
|
|---|
| 227 | void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);
|
|---|
| 228 | /**
|
|---|
| 229 | * @}
|
|---|
| 230 | */
|
|---|
| 231 |
|
|---|
| 232 | /** @addtogroup GPIO_Exported_Functions_Group2
|
|---|
| 233 | * @{
|
|---|
| 234 | */
|
|---|
| 235 | /* IO operation functions *****************************************************/
|
|---|
| 236 | GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
|
|---|
| 237 | void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
|
|---|
| 238 | void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
|
|---|
| 239 | HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
|
|---|
| 240 | void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
|
|---|
| 241 | void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
|
|---|
| 242 |
|
|---|
| 243 | /**
|
|---|
| 244 | * @}
|
|---|
| 245 | */
|
|---|
| 246 |
|
|---|
| 247 | /**
|
|---|
| 248 | * @}
|
|---|
| 249 | */
|
|---|
| 250 | /* Private types -------------------------------------------------------------*/
|
|---|
| 251 | /* Private variables ---------------------------------------------------------*/
|
|---|
| 252 | /* Private constants ---------------------------------------------------------*/
|
|---|
| 253 | /** @defgroup GPIO_Private_Constants GPIO Private Constants
|
|---|
| 254 | * @{
|
|---|
| 255 | */
|
|---|
| 256 | #define GPIO_MODE 0x00000003U
|
|---|
| 257 | #define EXTI_MODE 0x10000000U
|
|---|
| 258 | #define GPIO_MODE_IT 0x00010000U
|
|---|
| 259 | #define GPIO_MODE_EVT 0x00020000U
|
|---|
| 260 | #define RISING_EDGE 0x00100000U
|
|---|
| 261 | #define FALLING_EDGE 0x00200000U
|
|---|
| 262 | #define GPIO_OUTPUT_TYPE 0x00000010U
|
|---|
| 263 |
|
|---|
| 264 | #define MODE_INPUT 0x00000000U /*!< Input Mode */
|
|---|
| 265 | #define MODE_OUTPUT 0x00000001U /*!< Output Mode */
|
|---|
| 266 | #define MODE_AF 0x00000002U /*!< Alternate Function Mode */
|
|---|
| 267 | #define MODE_ANALOG 0x00000003U /*!< Analog Mode */
|
|---|
| 268 |
|
|---|
| 269 | #define MODE_PP 0x00000000U /*!< Push Pull Mode */
|
|---|
| 270 | #define MODE_OD 0x00000010U /*!< Open Drain Mode */
|
|---|
| 271 |
|
|---|
| 272 | /**
|
|---|
| 273 | * @}
|
|---|
| 274 | */
|
|---|
| 275 |
|
|---|
| 276 | /* Private macros ------------------------------------------------------------*/
|
|---|
| 277 | /** @defgroup GPIO_Private_Macros GPIO Private Macros
|
|---|
| 278 | * @{
|
|---|
| 279 | */
|
|---|
| 280 | #define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))
|
|---|
| 281 | #define IS_GPIO_PIN(PIN) (((((uint32_t)PIN) & GPIO_PIN_MASK ) != 0x00U) && ((((uint32_t)PIN) & ~GPIO_PIN_MASK) == 0x00U))
|
|---|
| 282 | #define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT) ||\
|
|---|
| 283 | ((MODE) == GPIO_MODE_OUTPUT_PP) ||\
|
|---|
| 284 | ((MODE) == GPIO_MODE_OUTPUT_OD) ||\
|
|---|
| 285 | ((MODE) == GPIO_MODE_AF_PP) ||\
|
|---|
| 286 | ((MODE) == GPIO_MODE_AF_OD) ||\
|
|---|
| 287 | ((MODE) == GPIO_MODE_IT_RISING) ||\
|
|---|
| 288 | ((MODE) == GPIO_MODE_IT_FALLING) ||\
|
|---|
| 289 | ((MODE) == GPIO_MODE_IT_RISING_FALLING) ||\
|
|---|
| 290 | ((MODE) == GPIO_MODE_EVT_RISING) ||\
|
|---|
| 291 | ((MODE) == GPIO_MODE_EVT_FALLING) ||\
|
|---|
| 292 | ((MODE) == GPIO_MODE_EVT_RISING_FALLING) ||\
|
|---|
| 293 | ((MODE) == GPIO_MODE_ANALOG))
|
|---|
| 294 | #define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_SPEED_FREQ_LOW) || ((SPEED) == GPIO_SPEED_FREQ_MEDIUM) || \
|
|---|
| 295 | ((SPEED) == GPIO_SPEED_FREQ_HIGH) || ((SPEED) == GPIO_SPEED_FREQ_VERY_HIGH))
|
|---|
| 296 | #define IS_GPIO_PULL(PULL) (((PULL) == GPIO_NOPULL) || ((PULL) == GPIO_PULLUP) || \
|
|---|
| 297 | ((PULL) == GPIO_PULLDOWN))
|
|---|
| 298 | /**
|
|---|
| 299 | * @}
|
|---|
| 300 | */
|
|---|
| 301 |
|
|---|
| 302 | /* Private functions ---------------------------------------------------------*/
|
|---|
| 303 | /** @defgroup GPIO_Private_Functions GPIO Private Functions
|
|---|
| 304 | * @{
|
|---|
| 305 | */
|
|---|
| 306 |
|
|---|
| 307 | /**
|
|---|
| 308 | * @}
|
|---|
| 309 | */
|
|---|
| 310 |
|
|---|
| 311 | /**
|
|---|
| 312 | * @}
|
|---|
| 313 | */
|
|---|
| 314 |
|
|---|
| 315 | /**
|
|---|
| 316 | * @}
|
|---|
| 317 | */
|
|---|
| 318 |
|
|---|
| 319 | #ifdef __cplusplus
|
|---|
| 320 | }
|
|---|
| 321 | #endif
|
|---|
| 322 |
|
|---|
| 323 | #endif /* __STM32F4xx_HAL_GPIO_H */
|
|---|
| 324 |
|
|---|
| 325 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|---|