1 /** 2 ****************************************************************************** 3 * @file stm32h5xx_hal_gpio.h 4 * @author MCD Application Team 5 * @brief Header file of GPIO HAL module. 6 ****************************************************************************** 7 * @attention 8 * 9 * Copyright (c) 2023 STMicroelectronics. 10 * All rights reserved. 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 STM32H5xx_HAL_GPIO_H 22 #define STM32H5xx_HAL_GPIO_H 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 /* Includes ------------------------------------------------------------------*/ 29 #include "stm32h5xx_hal_def.h" 30 31 /** @addtogroup STM32H5xx_HAL_Driver 32 * @{ 33 */ 34 35 /** @defgroup GPIO GPIO 36 * @brief GPIO HAL module driver 37 * @{ 38 */ 39 40 /* Exported types ------------------------------------------------------------*/ 41 42 /** @defgroup GPIO_Exported_Types GPIO Exported Types 43 * @{ 44 */ 45 /** 46 * @brief GPIO Init structure definition 47 */ 48 typedef struct 49 { 50 uint32_t Pin; /*!< Specifies the GPIO pins to be configured. 51 This parameter can be a value of @ref GPIO_pins */ 52 53 uint32_t Mode; /*!< Specifies the operating mode for the selected pins. 54 This parameter can be a value of @ref GPIO_mode */ 55 56 uint32_t Pull; /*!< Specifies the Pull-up or Pull-Down activation for the selected pins. 57 This parameter can be a value of @ref GPIO_pull */ 58 59 uint32_t Speed; /*!< Specifies the speed for the selected pins. 60 This parameter can be a value of @ref GPIO_speed */ 61 62 uint32_t Alternate; /*!< Peripheral to be connected to the selected pins 63 This parameter can be a value of @ref GPIOEx_Alternate_function_selection */ 64 } GPIO_InitTypeDef; 65 66 /** 67 * @brief GPIO Bit SET and Bit RESET enumeration 68 */ 69 typedef enum 70 { 71 GPIO_PIN_RESET = 0U, 72 GPIO_PIN_SET 73 } GPIO_PinState; 74 /** 75 * @} 76 */ 77 78 /* Exported constants --------------------------------------------------------*/ 79 /** @defgroup GPIO_Exported_Constants GPIO Exported Constants 80 * @{ 81 */ 82 /** @defgroup GPIO_pins GPIO pins 83 * @{ 84 */ 85 #define GPIO_PIN_0 ((uint16_t)0x0001) /* Pin 0 selected */ 86 #define GPIO_PIN_1 ((uint16_t)0x0002) /* Pin 1 selected */ 87 #define GPIO_PIN_2 ((uint16_t)0x0004) /* Pin 2 selected */ 88 #define GPIO_PIN_3 ((uint16_t)0x0008) /* Pin 3 selected */ 89 #define GPIO_PIN_4 ((uint16_t)0x0010) /* Pin 4 selected */ 90 #define GPIO_PIN_5 ((uint16_t)0x0020) /* Pin 5 selected */ 91 #define GPIO_PIN_6 ((uint16_t)0x0040) /* Pin 6 selected */ 92 #define GPIO_PIN_7 ((uint16_t)0x0080) /* Pin 7 selected */ 93 #define GPIO_PIN_8 ((uint16_t)0x0100) /* Pin 8 selected */ 94 #define GPIO_PIN_9 ((uint16_t)0x0200) /* Pin 9 selected */ 95 #define GPIO_PIN_10 ((uint16_t)0x0400) /* Pin 10 selected */ 96 #define GPIO_PIN_11 ((uint16_t)0x0800) /* Pin 11 selected */ 97 #define GPIO_PIN_12 ((uint16_t)0x1000) /* Pin 12 selected */ 98 #define GPIO_PIN_13 ((uint16_t)0x2000) /* Pin 13 selected */ 99 #define GPIO_PIN_14 ((uint16_t)0x4000) /* Pin 14 selected */ 100 #define GPIO_PIN_15 ((uint16_t)0x8000) /* Pin 15 selected */ 101 #define GPIO_PIN_ALL ((uint16_t)0xFFFF) /* All pins selected */ 102 103 #define GPIO_PIN_MASK (0x0000FFFFU) /* PIN mask for assert test */ 104 /** 105 * @} 106 */ 107 108 /** @defgroup GPIO_mode GPIO mode 109 * @brief GPIO Configuration Mode 110 * Elements values convention: 0xX0yz00YZ 111 * - X : GPIO mode or EXTI Mode 112 * - y : External IT or Event trigger detection 113 * - z : IO configuration on External IT or Event 114 * - Y : Output type (Push Pull or Open Drain) 115 * - Z : IO Direction mode (Input, Output, (Alternate or Analog)) 116 * @{ 117 */ 118 /*!< Input Floating Mode */ 119 #define GPIO_MODE_INPUT (0x00000000U) 120 /*!< Output Push Pull Mode */ 121 #define GPIO_MODE_OUTPUT_PP (0x00000001U) 122 /*!< Output Open Drain Mode */ 123 #define GPIO_MODE_OUTPUT_OD (0x00000011U) 124 /*!< Alternate Function Push Pull Mode */ 125 #define GPIO_MODE_AF_PP (0x00000002U) 126 /*!< Alternate Function Open Drain Mode */ 127 #define GPIO_MODE_AF_OD (0x00000012U) 128 /*!< Analog Mode */ 129 #define GPIO_MODE_ANALOG (0x00000003U) 130 /*!< External Interrupt Mode with Rising edge trigger detection */ 131 #define GPIO_MODE_IT_RISING (0x10110000U) 132 /*!< External Interrupt Mode with Falling edge trigger detection */ 133 #define GPIO_MODE_IT_FALLING (0x10210000U) 134 /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ 135 #define GPIO_MODE_IT_RISING_FALLING (0x10310000U) 136 /*!< External Event Mode with Rising edge trigger detection */ 137 #define GPIO_MODE_EVT_RISING (0x10120000U) 138 /*!< External Event Mode with Falling edge trigger detection */ 139 #define GPIO_MODE_EVT_FALLING (0x10220000U) 140 /*!< External Event Mode with Rising/Falling edge trigger detection */ 141 #define GPIO_MODE_EVT_RISING_FALLING (0x10320000U) 142 /** 143 * @} 144 */ 145 146 /** @defgroup GPIO_speed GPIO speed 147 * @brief GPIO Output Maximum frequency 148 * @{ 149 */ 150 #define GPIO_SPEED_FREQ_LOW (0x00000000U) /*!< Low speed */ 151 #define GPIO_SPEED_FREQ_MEDIUM (0x00000001U) /*!< Medium speed */ 152 #define GPIO_SPEED_FREQ_HIGH (0x00000002U) /*!< High speed */ 153 #define GPIO_SPEED_FREQ_VERY_HIGH (0x00000003U) /*!< Very-high speed */ 154 /** 155 * @} 156 */ 157 158 /** @defgroup GPIO_pull GPIO pull 159 * @brief GPIO Pull-Up or Pull-Down Activation 160 * @{ 161 */ 162 #define GPIO_NOPULL (0x00000000U) /*!< No Pull-up or Pull-down activation */ 163 #define GPIO_PULLUP (0x00000001U) /*!< Pull-up activation */ 164 #define GPIO_PULLDOWN (0x00000002U) /*!< Pull-down activation */ 165 /** 166 * @} 167 */ 168 169 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) 170 171 /** @defgroup GPIO_attributes GPIO attributes 172 * @brief GPIO pin secure or non-secure attributes 173 * @{ 174 */ 175 #define GPIO_PIN_SEC (0x00000001U) /*!< Secure pin attribute */ 176 #define GPIO_PIN_NSEC (0x00000000U) /*!< Non-secure pin attribute */ 177 /** 178 * @} 179 */ 180 181 #endif /* __ARM_FEATURE_CMSE */ 182 /** 183 * @} 184 */ 185 186 /* Exported macro ------------------------------------------------------------*/ 187 /** @defgroup GPIO_Exported_Macros GPIO Exported Macros 188 * @{ 189 */ 190 191 /** 192 * @brief Check whether the specified EXTI line is rising edge asserted or not. 193 * @param __EXTI_LINE__: specifies the EXTI line to check. 194 * This parameter can be GPIO_PIN_x where x can be(0..15) 195 * @retval The new state of __EXTI_LINE__ (SET or RESET). 196 */ 197 #define __HAL_GPIO_EXTI_GET_RISING_IT(__EXTI_LINE__) (EXTI->RPR1 & (__EXTI_LINE__)) 198 199 /** 200 * @brief Clear the EXTI's line rising pending bits. 201 * @param __EXTI_LINE__: specifies the EXTI lines to clear. 202 * This parameter can be any combination of GPIO_PIN_x where x can be (0..15) 203 * @retval None 204 */ 205 #define __HAL_GPIO_EXTI_CLEAR_RISING_IT(__EXTI_LINE__) (EXTI->RPR1 = (__EXTI_LINE__)) 206 207 /** 208 * @brief Check whether the specified EXTI line is falling edge asserted or not. 209 * @param __EXTI_LINE__: specifies the EXTI line to check. 210 * This parameter can be GPIO_PIN_x where x can be(0..15) 211 * @retval The new state of __EXTI_LINE__ (SET or RESET). 212 */ 213 #define __HAL_GPIO_EXTI_GET_FALLING_IT(__EXTI_LINE__) (EXTI->FPR1 & (__EXTI_LINE__)) 214 215 /** 216 * @brief Clear the EXTI's line falling pending bits. 217 * @param __EXTI_LINE__: specifies the EXTI lines to clear. 218 * This parameter can be any combination of GPIO_PIN_x where x can be (0..15) 219 * @retval None 220 */ 221 #define __HAL_GPIO_EXTI_CLEAR_FALLING_IT(__EXTI_LINE__) (EXTI->FPR1 = (__EXTI_LINE__)) 222 223 /** 224 * @brief Check whether the specified EXTI line is asserted or not. 225 * @param __EXTI_LINE__: specifies the EXTI line to check. 226 * This parameter can be GPIO_PIN_x where x can be(0..15) 227 * @retval The new state of __EXTI_LINE__ (SET or RESET). 228 */ 229 #define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (__HAL_GPIO_EXTI_GET_RISING_IT(__EXTI_LINE__) || \ 230 __HAL_GPIO_EXTI_GET_FALLING_IT(__EXTI_LINE__)) 231 232 /** 233 * @brief Clear the EXTI's line pending bits. 234 * @param __EXTI_LINE__: specifies the EXTI lines to clear. 235 * This parameter can be any combination of GPIO_PIN_x where x can be (0..15) 236 * @retval None 237 */ 238 #define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) \ 239 do { \ 240 __HAL_GPIO_EXTI_CLEAR_RISING_IT(__EXTI_LINE__); \ 241 __HAL_GPIO_EXTI_CLEAR_FALLING_IT(__EXTI_LINE__); \ 242 } while(0) 243 244 245 /** 246 * @brief Generate a Software interrupt on selected EXTI line(s). 247 * @param __EXTI_LINE__: specifies the EXTI line to set. 248 * This parameter can be any combination of GPIO_PIN_x where x can be (0..15) 249 * @retval None 250 */ 251 #define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER1 = (__EXTI_LINE__)) 252 253 /** 254 * @brief Check whether the specified EXTI line flag is set or not. 255 * @param __EXTI_LINE__ specifies the EXTI line flag to check. 256 * This parameter can be GPIO_PIN_x where x can be(0..15) 257 * @retval The new state of __EXTI_LINE__ (SET or RESET). 258 */ 259 #define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) 260 261 /** 262 * @brief Clear the EXTI line pending flags. 263 * @param __EXTI_LINE__ specifies the EXTI lines flags to clear. 264 * This parameter can be any combination of GPIO_PIN_x where x can be (0..15) 265 * @retval None 266 */ 267 #define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__) __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) 268 269 /** 270 * @} 271 */ 272 273 /* Private macros ------------------------------------------------------------*/ 274 /** @defgroup GPIO_Private_Macros GPIO Private Macros 275 * @{ 276 */ 277 #define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET)) 278 279 #define IS_GPIO_PIN(__PIN__) ((((uint32_t)(__PIN__) & GPIO_PIN_MASK) != 0x00U) &&\ 280 (((uint32_t)(__PIN__) & ~GPIO_PIN_MASK) == 0x00U)) 281 282 #define IS_GPIO_COMMON_PIN(__RESETMASK__, __SETMASK__) \ 283 (((uint32_t)(__RESETMASK__) & (uint32_t)(__SETMASK__)) == 0x00u) 284 285 #define IS_GPIO_MODE(__MODE__) (((__MODE__) == GPIO_MODE_INPUT) ||\ 286 ((__MODE__) == GPIO_MODE_OUTPUT_PP) ||\ 287 ((__MODE__) == GPIO_MODE_OUTPUT_OD) ||\ 288 ((__MODE__) == GPIO_MODE_AF_PP) ||\ 289 ((__MODE__) == GPIO_MODE_AF_OD) ||\ 290 ((__MODE__) == GPIO_MODE_IT_RISING) ||\ 291 ((__MODE__) == GPIO_MODE_IT_FALLING) ||\ 292 ((__MODE__) == GPIO_MODE_IT_RISING_FALLING) ||\ 293 ((__MODE__) == GPIO_MODE_EVT_RISING) ||\ 294 ((__MODE__) == GPIO_MODE_EVT_FALLING) ||\ 295 ((__MODE__) == GPIO_MODE_EVT_RISING_FALLING) ||\ 296 ((__MODE__) == GPIO_MODE_ANALOG)) 297 298 #define IS_GPIO_SPEED(__SPEED__) (((__SPEED__) == GPIO_SPEED_FREQ_LOW) ||\ 299 ((__SPEED__) == GPIO_SPEED_FREQ_MEDIUM) ||\ 300 ((__SPEED__) == GPIO_SPEED_FREQ_HIGH) ||\ 301 ((__SPEED__) == GPIO_SPEED_FREQ_VERY_HIGH)) 302 303 #define IS_GPIO_PULL(__PULL__) (((__PULL__) == GPIO_NOPULL) ||\ 304 ((__PULL__) == GPIO_PULLUP) || \ 305 ((__PULL__) == GPIO_PULLDOWN)) 306 307 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) 308 309 #define IS_GPIO_PIN_ATTRIBUTES(__ATTRIBUTES__) (((__ATTRIBUTES__) == GPIO_PIN_SEC) ||\ 310 ((__ATTRIBUTES__) == GPIO_PIN_NSEC)) 311 312 #endif /* __ARM_FEATURE_CMSE */ 313 314 /** 315 * @} 316 */ 317 318 /* Include GPIO HAL Extended module */ 319 #include "stm32h5xx_hal_gpio_ex.h" 320 321 /* Exported functions --------------------------------------------------------*/ 322 /** @addtogroup GPIO_Exported_Functions GPIO Exported Functions 323 * @brief GPIO Exported Functions 324 * @{ 325 */ 326 327 /** @addtogroup GPIO_Exported_Functions_Group1 Initialization/de-initialization functions 328 * @brief Initialization and Configuration functions 329 * @{ 330 */ 331 332 /* Initialization and de-initialization functions *****************************/ 333 void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, const GPIO_InitTypeDef *pGPIO_Init); 334 void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin); 335 336 /** 337 * @} 338 */ 339 340 /** @addtogroup GPIO_Exported_Functions_Group2 IO operation functions 341 * @brief IO operation functions 342 * @{ 343 */ 344 345 /* IO operation functions *****************************************************/ 346 GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); 347 void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); 348 void HAL_GPIO_WriteMultipleStatePin(GPIO_TypeDef *GPIOx, uint16_t PinReset, uint16_t PinSet); 349 void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); 350 void HAL_GPIO_EnableHighSPeedLowVoltage(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); 351 void HAL_GPIO_DisableHighSPeedLowVoltage(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); 352 HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); 353 void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin); 354 void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin); 355 void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin); 356 357 /** 358 * @} 359 */ 360 361 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) 362 363 /** @addtogroup GPIO_Exported_Functions_Group3 IO attributes management functions 364 * @{ 365 */ 366 367 /* IO attributes management functions *****************************************/ 368 void HAL_GPIO_ConfigPinAttributes(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, uint32_t PinAttributes); 369 HAL_StatusTypeDef HAL_GPIO_GetConfigPinAttributes(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, uint32_t *pPinAttributes); 370 371 /** 372 * @} 373 */ 374 375 #endif /* __ARM_FEATURE_CMSE */ 376 377 /** 378 * @} 379 */ 380 381 /** 382 * @} 383 */ 384 385 /** 386 * @} 387 */ 388 389 #ifdef __cplusplus 390 } 391 #endif 392 393 #endif /* STM32H5xx_HAL_GPIO_H */ 394