STM32L443xx HAL User Manual
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32l4xx_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 STM32L4xx_HAL_GPIO_H 00021 #define STM32L4xx_HAL_GPIO_H 00022 00023 #ifdef __cplusplus 00024 extern "C" { 00025 #endif 00026 00027 /* Includes ------------------------------------------------------------------*/ 00028 #include "stm32l4xx_hal_def.h" 00029 00030 /** @addtogroup STM32L4xx_HAL_Driver 00031 * @{ 00032 */ 00033 00034 /** @addtogroup GPIO 00035 * @{ 00036 */ 00037 00038 /* Exported types ------------------------------------------------------------*/ 00039 00040 /** @defgroup GPIO_Exported_Types GPIO Exported Types 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 */ 00050 00051 uint32_t Mode; /*!< Specifies the operating mode for the selected pins. 00052 This parameter can be a value of @ref GPIO_mode */ 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 */ 00056 00057 uint32_t Speed; /*!< Specifies the speed for the selected pins. 00058 This parameter can be a value of @ref GPIO_speed */ 00059 00060 uint32_t Alternate; /*!< Peripheral to be connected to the selected pins 00061 This parameter can be a value of @ref GPIOEx_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 /** @defgroup GPIO_Exported_Constants GPIO Exported Constants 00078 * @{ 00079 */ 00080 /** @defgroup GPIO_pins GPIO pins 00081 * @{ 00082 */ 00083 #define GPIO_PIN_0 ((uint16_t)0x0001) /* Pin 0 selected */ 00084 #define GPIO_PIN_1 ((uint16_t)0x0002) /* Pin 1 selected */ 00085 #define GPIO_PIN_2 ((uint16_t)0x0004) /* Pin 2 selected */ 00086 #define GPIO_PIN_3 ((uint16_t)0x0008) /* Pin 3 selected */ 00087 #define GPIO_PIN_4 ((uint16_t)0x0010) /* Pin 4 selected */ 00088 #define GPIO_PIN_5 ((uint16_t)0x0020) /* Pin 5 selected */ 00089 #define GPIO_PIN_6 ((uint16_t)0x0040) /* Pin 6 selected */ 00090 #define GPIO_PIN_7 ((uint16_t)0x0080) /* Pin 7 selected */ 00091 #define GPIO_PIN_8 ((uint16_t)0x0100) /* Pin 8 selected */ 00092 #define GPIO_PIN_9 ((uint16_t)0x0200) /* Pin 9 selected */ 00093 #define GPIO_PIN_10 ((uint16_t)0x0400) /* Pin 10 selected */ 00094 #define GPIO_PIN_11 ((uint16_t)0x0800) /* Pin 11 selected */ 00095 #define GPIO_PIN_12 ((uint16_t)0x1000) /* Pin 12 selected */ 00096 #define GPIO_PIN_13 ((uint16_t)0x2000) /* Pin 13 selected */ 00097 #define GPIO_PIN_14 ((uint16_t)0x4000) /* Pin 14 selected */ 00098 #define GPIO_PIN_15 ((uint16_t)0x8000) /* Pin 15 selected */ 00099 #define GPIO_PIN_All ((uint16_t)0xFFFF) /* All pins selected */ 00100 00101 #define GPIO_PIN_MASK ((uint32_t)0x0000FFFF) /* PIN mask for assert test */ 00102 /** 00103 * @} 00104 */ 00105 00106 /** @defgroup GPIO_mode GPIO mode 00107 * @brief GPIO Configuration Mode 00108 * Elements values convention: 0x00WX00YZ 00109 * - W : EXTI trigger detection on 3 bits 00110 * - X : EXTI mode (IT or Event) on 2 bits 00111 * - Y : Output type (Push Pull or Open Drain) on 1 bit 00112 * - Z : GPIO mode (Input, Output, Alternate or Analog) on 2 bits 00113 * @{ 00114 */ 00115 #define GPIO_MODE_INPUT MODE_INPUT /*!< Input Floating Mode */ 00116 #define GPIO_MODE_OUTPUT_PP (MODE_OUTPUT | OUTPUT_PP) /*!< Output Push Pull Mode */ 00117 #define GPIO_MODE_OUTPUT_OD (MODE_OUTPUT | OUTPUT_OD) /*!< Output Open Drain Mode */ 00118 #define GPIO_MODE_AF_PP (MODE_AF | OUTPUT_PP) /*!< Alternate Function Push Pull Mode */ 00119 #define GPIO_MODE_AF_OD (MODE_AF | OUTPUT_OD) /*!< Alternate Function Open Drain Mode */ 00120 #define GPIO_MODE_ANALOG MODE_ANALOG /*!< Analog Mode */ 00121 #define GPIO_MODE_ANALOG_ADC_CONTROL (MODE_ANALOG | 0x8uL) /*!< Analog Mode for ADC conversion (0x0000000Bu)*/ 00122 #define GPIO_MODE_IT_RISING (MODE_INPUT | EXTI_IT | TRIGGER_RISING) /*!< External Interrupt Mode with Rising edge trigger detection */ 00123 #define GPIO_MODE_IT_FALLING (MODE_INPUT | EXTI_IT | TRIGGER_FALLING) /*!< External Interrupt Mode with Falling edge trigger detection */ 00124 #define GPIO_MODE_IT_RISING_FALLING (MODE_INPUT | EXTI_IT | TRIGGER_RISING | TRIGGER_FALLING) /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ 00125 #define GPIO_MODE_EVT_RISING (MODE_INPUT | EXTI_EVT | TRIGGER_RISING) /*!< External Event Mode with Rising edge trigger detection */ 00126 #define GPIO_MODE_EVT_FALLING (MODE_INPUT | EXTI_EVT | TRIGGER_FALLING) /*!< External Event Mode with Falling edge trigger detection */ 00127 #define GPIO_MODE_EVT_RISING_FALLING (MODE_INPUT | EXTI_EVT | TRIGGER_RISING | TRIGGER_FALLING) /*!< External Event Mode with Rising/Falling edge trigger detection */ 00128 /** 00129 * @} 00130 */ 00131 00132 /** @defgroup GPIO_speed GPIO speed 00133 * @brief GPIO Output Maximum frequency 00134 * @{ 00135 */ 00136 #define GPIO_SPEED_FREQ_LOW 0x00000000u /*!< Low speed */ 00137 #define GPIO_SPEED_FREQ_MEDIUM 0x00000001u /*!< Medium speed */ 00138 #define GPIO_SPEED_FREQ_HIGH 0x00000002u /*!< High speed */ 00139 #define GPIO_SPEED_FREQ_VERY_HIGH 0x00000003u /*!< Very high speed */ 00140 /** 00141 * @} 00142 */ 00143 00144 /** @defgroup GPIO_pull GPIO pull 00145 * @brief GPIO Pull-Up or Pull-Down Activation 00146 * @{ 00147 */ 00148 #define GPIO_NOPULL 0x00000000u /*!< No Pull-up or Pull-down activation */ 00149 #define GPIO_PULLUP 0x00000001u /*!< Pull-up activation */ 00150 #define GPIO_PULLDOWN 0x00000002u /*!< Pull-down activation */ 00151 /** 00152 * @} 00153 */ 00154 00155 /** 00156 * @} 00157 */ 00158 00159 /* Exported macro ------------------------------------------------------------*/ 00160 /** @defgroup GPIO_Exported_Macros GPIO Exported Macros 00161 * @{ 00162 */ 00163 00164 /** 00165 * @brief Check whether the specified EXTI line flag is set or not. 00166 * @param __EXTI_LINE__ specifies the EXTI line flag to check. 00167 * This parameter can be GPIO_PIN_x where x can be(0..15) 00168 * @retval The new state of __EXTI_LINE__ (SET or RESET). 00169 */ 00170 #define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) (EXTI->PR1 & (__EXTI_LINE__)) 00171 00172 /** 00173 * @brief Clear the EXTI's line pending flags. 00174 * @param __EXTI_LINE__ specifies the EXTI lines flags to clear. 00175 * This parameter can be any combination of GPIO_PIN_x where x can be (0..15) 00176 * @retval None 00177 */ 00178 #define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__) (EXTI->PR1 = (__EXTI_LINE__)) 00179 00180 /** 00181 * @brief Check whether the specified EXTI line is asserted or not. 00182 * @param __EXTI_LINE__ specifies the EXTI line to check. 00183 * This parameter can be GPIO_PIN_x where x can be(0..15) 00184 * @retval The new state of __EXTI_LINE__ (SET or RESET). 00185 */ 00186 #define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (EXTI->PR1 & (__EXTI_LINE__)) 00187 00188 /** 00189 * @brief Clear the EXTI's line pending bits. 00190 * @param __EXTI_LINE__ specifies the EXTI lines to clear. 00191 * This parameter can be any combination of GPIO_PIN_x where x can be (0..15) 00192 * @retval None 00193 */ 00194 #define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) (EXTI->PR1 = (__EXTI_LINE__)) 00195 00196 /** 00197 * @brief Generate a Software interrupt on selected EXTI line. 00198 * @param __EXTI_LINE__ specifies the EXTI line to check. 00199 * This parameter can be GPIO_PIN_x where x can be(0..15) 00200 * @retval None 00201 */ 00202 #define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER1 |= (__EXTI_LINE__)) 00203 00204 /** 00205 * @} 00206 */ 00207 00208 /* Private macros ------------------------------------------------------------*/ 00209 /** @defgroup GPIO_Private_Constants GPIO Private Constants 00210 * @{ 00211 */ 00212 #define GPIO_MODE_Pos 0u 00213 #define GPIO_MODE (0x3uL << GPIO_MODE_Pos) 00214 #define MODE_INPUT (0x0uL << GPIO_MODE_Pos) 00215 #define MODE_OUTPUT (0x1uL << GPIO_MODE_Pos) 00216 #define MODE_AF (0x2uL << GPIO_MODE_Pos) 00217 #define MODE_ANALOG (0x3uL << GPIO_MODE_Pos) 00218 #define OUTPUT_TYPE_Pos 4u 00219 #define OUTPUT_TYPE (0x1uL << OUTPUT_TYPE_Pos) 00220 #define OUTPUT_PP (0x0uL << OUTPUT_TYPE_Pos) 00221 #define OUTPUT_OD (0x1uL << OUTPUT_TYPE_Pos) 00222 #define EXTI_MODE_Pos 16u 00223 #define EXTI_MODE (0x3uL << EXTI_MODE_Pos) 00224 #define EXTI_IT (0x1uL << EXTI_MODE_Pos) 00225 #define EXTI_EVT (0x2uL << EXTI_MODE_Pos) 00226 #define TRIGGER_MODE_Pos 20u 00227 #define TRIGGER_MODE (0x7uL << TRIGGER_MODE_Pos) 00228 #define TRIGGER_RISING (0x1uL << TRIGGER_MODE_Pos) 00229 #define TRIGGER_FALLING (0x2uL << TRIGGER_MODE_Pos) 00230 00231 /** 00232 * @} 00233 */ 00234 00235 /** @addtogroup GPIO_Private_Macros GPIO Private Macros 00236 * @{ 00237 */ 00238 #define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET)) 00239 00240 #define IS_GPIO_PIN(__PIN__) ((((uint32_t)(__PIN__) & GPIO_PIN_MASK) != 0x00U) &&\ 00241 (((uint32_t)(__PIN__) & ~GPIO_PIN_MASK) == 0x00U)) 00242 00243 #define IS_GPIO_MODE(__MODE__) (((__MODE__) == GPIO_MODE_INPUT) ||\ 00244 ((__MODE__) == GPIO_MODE_OUTPUT_PP) ||\ 00245 ((__MODE__) == GPIO_MODE_OUTPUT_OD) ||\ 00246 ((__MODE__) == GPIO_MODE_AF_PP) ||\ 00247 ((__MODE__) == GPIO_MODE_AF_OD) ||\ 00248 ((__MODE__) == GPIO_MODE_IT_RISING) ||\ 00249 ((__MODE__) == GPIO_MODE_IT_FALLING) ||\ 00250 ((__MODE__) == GPIO_MODE_IT_RISING_FALLING) ||\ 00251 ((__MODE__) == GPIO_MODE_EVT_RISING) ||\ 00252 ((__MODE__) == GPIO_MODE_EVT_FALLING) ||\ 00253 ((__MODE__) == GPIO_MODE_EVT_RISING_FALLING) ||\ 00254 ((__MODE__) == GPIO_MODE_ANALOG) ||\ 00255 ((__MODE__) == GPIO_MODE_ANALOG_ADC_CONTROL)) 00256 00257 #define IS_GPIO_SPEED(__SPEED__) (((__SPEED__) == GPIO_SPEED_FREQ_LOW) ||\ 00258 ((__SPEED__) == GPIO_SPEED_FREQ_MEDIUM) ||\ 00259 ((__SPEED__) == GPIO_SPEED_FREQ_HIGH) ||\ 00260 ((__SPEED__) == GPIO_SPEED_FREQ_VERY_HIGH)) 00261 00262 #define IS_GPIO_PULL(__PULL__) (((__PULL__) == GPIO_NOPULL) ||\ 00263 ((__PULL__) == GPIO_PULLUP) || \ 00264 ((__PULL__) == GPIO_PULLDOWN)) 00265 /** 00266 * @} 00267 */ 00268 00269 /* Include GPIO HAL Extended module */ 00270 #include "stm32l4xx_hal_gpio_ex.h" 00271 00272 /* Exported functions --------------------------------------------------------*/ 00273 /** @addtogroup GPIO_Exported_Functions GPIO Exported Functions 00274 * @{ 00275 */ 00276 00277 /** @addtogroup GPIO_Exported_Functions_Group1 Initialization/de-initialization functions 00278 * @brief Initialization and Configuration functions 00279 * @{ 00280 */ 00281 00282 /* Initialization and de-initialization functions *****************************/ 00283 void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); 00284 void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin); 00285 00286 /** 00287 * @} 00288 */ 00289 00290 /** @addtogroup GPIO_Exported_Functions_Group2 IO operation functions 00291 * @{ 00292 */ 00293 00294 /* IO operation functions *****************************************************/ 00295 GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 00296 void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); 00297 void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 00298 HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 00299 void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin); 00300 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin); 00301 00302 /** 00303 * @} 00304 */ 00305 00306 /** 00307 * @} 00308 */ 00309 00310 /** 00311 * @} 00312 */ 00313 00314 /** 00315 * @} 00316 */ 00317 00318 #ifdef __cplusplus 00319 } 00320 #endif 00321 00322 #endif /* STM32L4xx_HAL_GPIO_H */ 00323