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