STM32H735xx HAL User Manual
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32h7xx_hal_gpio.h 00004 * @author MCD Application Team 00005 * @brief Header file of GPIO HAL module. 00006 ****************************************************************************** 00007 * @attention 00008 * 00009 * Copyright (c) 2017 STMicroelectronics. 00010 * All rights reserved. 00011 * 00012 * This software is licensed under terms that can be found in the LICENSE file 00013 * in the root directory of this software component. 00014 * If no LICENSE file comes with this software, it is provided AS-IS. 00015 * 00016 ****************************************************************************** 00017 */ 00018 00019 /* Define to prevent recursive inclusion -------------------------------------*/ 00020 #ifndef STM32H7xx_HAL_GPIO_H 00021 #define STM32H7xx_HAL_GPIO_H 00022 00023 #ifdef __cplusplus 00024 extern "C" { 00025 #endif 00026 00027 /* Includes ------------------------------------------------------------------*/ 00028 #include "stm32h7xx_hal_def.h" 00029 00030 /** @addtogroup STM32H7xx_HAL_Driver 00031 * @{ 00032 */ 00033 00034 /** @addtogroup GPIO 00035 * @{ 00036 */ 00037 00038 /* Exported types ------------------------------------------------------------*/ 00039 /** @defgroup GPIO_Exported_Types GPIO Exported Types 00040 * @{ 00041 */ 00042 00043 /** 00044 * @brief GPIO Init structure definition 00045 */ 00046 typedef struct 00047 { 00048 uint32_t Pin; /*!< Specifies the GPIO pins to be configured. 00049 This parameter can be any value of @ref GPIO_pins_define */ 00050 00051 uint32_t Mode; /*!< Specifies the operating mode for the selected pins. 00052 This parameter can be a value of @ref GPIO_mode_define */ 00053 00054 uint32_t Pull; /*!< Specifies the Pull-up or Pull-Down activation for the selected pins. 00055 This parameter can be a value of @ref GPIO_pull_define */ 00056 00057 uint32_t Speed; /*!< Specifies the speed for the selected pins. 00058 This parameter can be a value of @ref GPIO_speed_define */ 00059 00060 uint32_t Alternate; /*!< Peripheral to be connected to the selected pins. 00061 This parameter can be a value of @ref GPIO_Alternate_function_selection */ 00062 } GPIO_InitTypeDef; 00063 00064 /** 00065 * @brief GPIO Bit SET and Bit RESET enumeration 00066 */ 00067 typedef enum 00068 { 00069 GPIO_PIN_RESET = 0U, 00070 GPIO_PIN_SET 00071 } GPIO_PinState; 00072 /** 00073 * @} 00074 */ 00075 00076 /* Exported constants --------------------------------------------------------*/ 00077 00078 /** @defgroup GPIO_Exported_Constants GPIO Exported Constants 00079 * @{ 00080 */ 00081 00082 /** @defgroup GPIO_pins_define GPIO pins define 00083 * @{ 00084 */ 00085 #define GPIO_PIN_0 ((uint16_t)0x0001) /* Pin 0 selected */ 00086 #define GPIO_PIN_1 ((uint16_t)0x0002) /* Pin 1 selected */ 00087 #define GPIO_PIN_2 ((uint16_t)0x0004) /* Pin 2 selected */ 00088 #define GPIO_PIN_3 ((uint16_t)0x0008) /* Pin 3 selected */ 00089 #define GPIO_PIN_4 ((uint16_t)0x0010) /* Pin 4 selected */ 00090 #define GPIO_PIN_5 ((uint16_t)0x0020) /* Pin 5 selected */ 00091 #define GPIO_PIN_6 ((uint16_t)0x0040) /* Pin 6 selected */ 00092 #define GPIO_PIN_7 ((uint16_t)0x0080) /* Pin 7 selected */ 00093 #define GPIO_PIN_8 ((uint16_t)0x0100) /* Pin 8 selected */ 00094 #define GPIO_PIN_9 ((uint16_t)0x0200) /* Pin 9 selected */ 00095 #define GPIO_PIN_10 ((uint16_t)0x0400) /* Pin 10 selected */ 00096 #define GPIO_PIN_11 ((uint16_t)0x0800) /* Pin 11 selected */ 00097 #define GPIO_PIN_12 ((uint16_t)0x1000) /* Pin 12 selected */ 00098 #define GPIO_PIN_13 ((uint16_t)0x2000) /* Pin 13 selected */ 00099 #define GPIO_PIN_14 ((uint16_t)0x4000) /* Pin 14 selected */ 00100 #define GPIO_PIN_15 ((uint16_t)0x8000) /* Pin 15 selected */ 00101 #define GPIO_PIN_All ((uint16_t)0xFFFF) /* All pins selected */ 00102 00103 #define GPIO_PIN_MASK (0x0000FFFFU) /* PIN mask for assert test */ 00104 /** 00105 * @} 00106 */ 00107 00108 /** @defgroup GPIO_mode_define GPIO mode define 00109 * @brief GPIO Configuration Mode 00110 * Elements values convention: 0x00WX00YZ 00111 * - W : EXTI trigger detection on 3 bits 00112 * - X : EXTI mode (IT or Event) on 2 bits 00113 * - Y : Output type (Push Pull or Open Drain) on 1 bit 00114 * - Z : GPIO mode (Input, Output, Alternate or Analog) on 2 bits 00115 * @{ 00116 */ 00117 #define GPIO_MODE_INPUT MODE_INPUT /*!< Input Floating Mode */ 00118 #define GPIO_MODE_OUTPUT_PP (MODE_OUTPUT | OUTPUT_PP) /*!< Output Push Pull Mode */ 00119 #define GPIO_MODE_OUTPUT_OD (MODE_OUTPUT | OUTPUT_OD) /*!< Output Open Drain Mode */ 00120 #define GPIO_MODE_AF_PP (MODE_AF | OUTPUT_PP) /*!< Alternate Function Push Pull Mode */ 00121 #define GPIO_MODE_AF_OD (MODE_AF | OUTPUT_OD) /*!< Alternate Function Open Drain Mode */ 00122 #define GPIO_MODE_ANALOG MODE_ANALOG /*!< Analog Mode */ 00123 #define GPIO_MODE_IT_RISING (MODE_INPUT | EXTI_IT | TRIGGER_RISING) /*!< External Interrupt Mode with Rising edge trigger detection */ 00124 #define GPIO_MODE_IT_FALLING (MODE_INPUT | EXTI_IT | TRIGGER_FALLING) /*!< External Interrupt Mode with Falling edge trigger detection */ 00125 #define GPIO_MODE_IT_RISING_FALLING (MODE_INPUT | EXTI_IT | TRIGGER_RISING | TRIGGER_FALLING) /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ 00126 00127 #define GPIO_MODE_EVT_RISING (MODE_INPUT | EXTI_EVT | TRIGGER_RISING) /*!< External Event Mode with Rising edge trigger detection */ 00128 #define GPIO_MODE_EVT_FALLING (MODE_INPUT | EXTI_EVT | TRIGGER_FALLING) /*!< External Event Mode with Falling edge trigger detection */ 00129 #define GPIO_MODE_EVT_RISING_FALLING (MODE_INPUT | EXTI_EVT | TRIGGER_RISING | TRIGGER_FALLING) /*!< External Event Mode with Rising/Falling edge trigger detection */ 00130 /** 00131 * @} 00132 */ 00133 00134 /** @defgroup GPIO_speed_define GPIO speed define 00135 * @brief GPIO Output Maximum frequency 00136 * @{ 00137 */ 00138 #define GPIO_SPEED_FREQ_LOW (0x00000000U) /*!< Low speed */ 00139 #define GPIO_SPEED_FREQ_MEDIUM (0x00000001U) /*!< Medium speed */ 00140 #define GPIO_SPEED_FREQ_HIGH (0x00000002U) /*!< Fast speed */ 00141 #define GPIO_SPEED_FREQ_VERY_HIGH (0x00000003U) /*!< High speed */ 00142 /** 00143 * @} 00144 */ 00145 00146 /** @defgroup GPIO_pull_define GPIO pull define 00147 * @brief GPIO Pull-Up or Pull-Down Activation 00148 * @{ 00149 */ 00150 #define GPIO_NOPULL (0x00000000U) /*!< No Pull-up or Pull-down activation */ 00151 #define GPIO_PULLUP (0x00000001U) /*!< Pull-up activation */ 00152 #define GPIO_PULLDOWN (0x00000002U) /*!< Pull-down activation */ 00153 /** 00154 * @} 00155 */ 00156 00157 /** 00158 * @} 00159 */ 00160 00161 /* Exported macro ------------------------------------------------------------*/ 00162 /** @defgroup GPIO_Exported_Macros GPIO Exported Macros 00163 * @{ 00164 */ 00165 00166 /** 00167 * @brief Checks whether the specified EXTI line flag is set or not. 00168 * @param __EXTI_LINE__: specifies the EXTI line flag to check. 00169 * This parameter can be GPIO_PIN_x where x can be(0..15) 00170 * @retval The new state of __EXTI_LINE__ (SET or RESET). 00171 */ 00172 #define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) (EXTI->PR1 & (__EXTI_LINE__)) 00173 00174 /** 00175 * @brief Clears the EXTI's line pending flags. 00176 * @param __EXTI_LINE__: specifies the EXTI lines flags to clear. 00177 * This parameter can be any combination of GPIO_PIN_x where x can be (0..15) 00178 * @retval None 00179 */ 00180 #define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__) (EXTI->PR1 = (__EXTI_LINE__)) 00181 00182 /** 00183 * @brief Checks whether the specified EXTI line is asserted or not. 00184 * @param __EXTI_LINE__: specifies the EXTI line to check. 00185 * This parameter can be GPIO_PIN_x where x can be(0..15) 00186 * @retval The new state of __EXTI_LINE__ (SET or RESET). 00187 */ 00188 #define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (EXTI->PR1 & (__EXTI_LINE__)) 00189 00190 /** 00191 * @brief Clears the EXTI's line pending bits. 00192 * @param __EXTI_LINE__: specifies the EXTI lines to clear. 00193 * This parameter can be any combination of GPIO_PIN_x where x can be (0..15) 00194 * @retval None 00195 */ 00196 #define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) (EXTI->PR1 = (__EXTI_LINE__)) 00197 00198 #if defined(DUAL_CORE) 00199 /** 00200 * @brief Checks whether the specified EXTI line flag is set or not. 00201 * @param __EXTI_LINE__: specifies the EXTI line flag to check. 00202 * This parameter can be GPIO_PIN_x where x can be(0..15) 00203 * @retval The new state of __EXTI_LINE__ (SET or RESET). 00204 */ 00205 #define __HAL_GPIO_EXTID2_GET_FLAG(__EXTI_LINE__) (EXTI->C2PR1 & (__EXTI_LINE__)) 00206 00207 /** 00208 * @brief Clears the EXTI's line pending flags. 00209 * @param __EXTI_LINE__: specifies the EXTI lines flags to clear. 00210 * This parameter can be any combination of GPIO_PIN_x where x can be (0..15) 00211 * @retval None 00212 */ 00213 #define __HAL_GPIO_EXTID2_CLEAR_FLAG(__EXTI_LINE__) (EXTI->C2PR1 = (__EXTI_LINE__)) 00214 00215 /** 00216 * @brief Checks whether the specified EXTI line is asserted or not. 00217 * @param __EXTI_LINE__: specifies the EXTI line to check. 00218 * This parameter can be GPIO_PIN_x where x can be(0..15) 00219 * @retval The new state of __EXTI_LINE__ (SET or RESET). 00220 */ 00221 #define __HAL_GPIO_EXTID2_GET_IT(__EXTI_LINE__) (EXTI->C2PR1 & (__EXTI_LINE__)) 00222 00223 /** 00224 * @brief Clears the EXTI's line pending bits. 00225 * @param __EXTI_LINE__: specifies the EXTI lines to clear. 00226 * This parameter can be any combination of GPIO_PIN_x where x can be (0..15) 00227 * @retval None 00228 */ 00229 #define __HAL_GPIO_EXTID2_CLEAR_IT(__EXTI_LINE__) (EXTI->C2PR1 = (__EXTI_LINE__)) 00230 #endif 00231 00232 /** 00233 * @brief Generates a Software interrupt on selected EXTI line. 00234 * @param __EXTI_LINE__: specifies the EXTI line to check. 00235 * This parameter can be GPIO_PIN_x where x can be(0..15) 00236 * @retval None 00237 */ 00238 #define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER1 |= (__EXTI_LINE__)) 00239 /** 00240 * @} 00241 */ 00242 00243 /* Include GPIO HAL Extension module */ 00244 #include "stm32h7xx_hal_gpio_ex.h" 00245 00246 /* Exported functions --------------------------------------------------------*/ 00247 /** @addtogroup GPIO_Exported_Functions 00248 * @{ 00249 */ 00250 00251 /** @addtogroup GPIO_Exported_Functions_Group1 00252 * @{ 00253 */ 00254 /* Initialization and de-initialization functions *****************************/ 00255 void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); 00256 void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin); 00257 /** 00258 * @} 00259 */ 00260 00261 /** @addtogroup GPIO_Exported_Functions_Group2 00262 * @{ 00263 */ 00264 /* IO operation functions *****************************************************/ 00265 GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); 00266 void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); 00267 void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); 00268 HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); 00269 void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin); 00270 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin); 00271 00272 /** 00273 * @} 00274 */ 00275 00276 /** 00277 * @} 00278 */ 00279 /* Private types -------------------------------------------------------------*/ 00280 /* Private variables ---------------------------------------------------------*/ 00281 /* Private constants ---------------------------------------------------------*/ 00282 /** @defgroup GPIO_Private_Constants GPIO Private Constants 00283 * @{ 00284 */ 00285 #define GPIO_MODE_Pos 0u 00286 #define GPIO_MODE (0x3uL << GPIO_MODE_Pos) 00287 #define MODE_INPUT (0x0uL << GPIO_MODE_Pos) 00288 #define MODE_OUTPUT (0x1uL << GPIO_MODE_Pos) 00289 #define MODE_AF (0x2uL << GPIO_MODE_Pos) 00290 #define MODE_ANALOG (0x3uL << GPIO_MODE_Pos) 00291 #define OUTPUT_TYPE_Pos 4u 00292 #define OUTPUT_TYPE (0x1uL << OUTPUT_TYPE_Pos) 00293 #define OUTPUT_PP (0x0uL << OUTPUT_TYPE_Pos) 00294 #define OUTPUT_OD (0x1uL << OUTPUT_TYPE_Pos) 00295 #define EXTI_MODE_Pos 16u 00296 #define EXTI_MODE (0x3uL << EXTI_MODE_Pos) 00297 #define EXTI_IT (0x1uL << EXTI_MODE_Pos) 00298 #define EXTI_EVT (0x2uL << EXTI_MODE_Pos) 00299 #define TRIGGER_MODE_Pos 20u 00300 #define TRIGGER_MODE (0x7uL << TRIGGER_MODE_Pos) 00301 #define TRIGGER_RISING (0x1uL << TRIGGER_MODE_Pos) 00302 #define TRIGGER_FALLING (0x2uL << TRIGGER_MODE_Pos) 00303 #define TRIGGER_LEVEL (0x4uL << TRIGGER_MODE_Pos) 00304 /** 00305 * @} 00306 */ 00307 00308 /* Private macros ------------------------------------------------------------*/ 00309 /** @defgroup GPIO_Private_Macros GPIO Private Macros 00310 * @{ 00311 */ 00312 #define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET)) 00313 #define IS_GPIO_PIN(__PIN__) ((((uint32_t)(__PIN__) & GPIO_PIN_MASK) != 0x00U) &&\ 00314 (((uint32_t)(__PIN__) & ~GPIO_PIN_MASK) == 0x00U)) 00315 #define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT) ||\ 00316 ((MODE) == GPIO_MODE_OUTPUT_PP) ||\ 00317 ((MODE) == GPIO_MODE_OUTPUT_OD) ||\ 00318 ((MODE) == GPIO_MODE_AF_PP) ||\ 00319 ((MODE) == GPIO_MODE_AF_OD) ||\ 00320 ((MODE) == GPIO_MODE_IT_RISING) ||\ 00321 ((MODE) == GPIO_MODE_IT_FALLING) ||\ 00322 ((MODE) == GPIO_MODE_IT_RISING_FALLING) ||\ 00323 ((MODE) == GPIO_MODE_EVT_RISING) ||\ 00324 ((MODE) == GPIO_MODE_EVT_FALLING) ||\ 00325 ((MODE) == GPIO_MODE_EVT_RISING_FALLING) ||\ 00326 ((MODE) == GPIO_MODE_ANALOG)) 00327 #define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_SPEED_FREQ_LOW) || ((SPEED) == GPIO_SPEED_FREQ_MEDIUM) || \ 00328 ((SPEED) == GPIO_SPEED_FREQ_HIGH) || ((SPEED) == GPIO_SPEED_FREQ_VERY_HIGH)) 00329 00330 #define IS_GPIO_PULL(PULL) (((PULL) == GPIO_NOPULL) || ((PULL) == GPIO_PULLUP) || \ 00331 ((PULL) == GPIO_PULLDOWN)) 00332 00333 /** 00334 * @} 00335 */ 00336 00337 /* Private functions ---------------------------------------------------------*/ 00338 /** @defgroup GPIO_Private_Functions GPIO Private Functions 00339 * @{ 00340 */ 00341 00342 /** 00343 * @} 00344 */ 00345 00346 /** 00347 * @} 00348 */ 00349 00350 /** 00351 * @} 00352 */ 00353 00354 #ifdef __cplusplus 00355 } 00356 #endif 00357 00358 #endif /* STM32H7xx_HAL_GPIO_H */ 00359