Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:35

0001 /**
0002   ******************************************************************************
0003   * @file    stm32h7xx_hal_gpio.h
0004   * @author  MCD Application Team
0005   * @brief   Header file of GPIO HAL module.
0006   ******************************************************************************
0007   * @attention
0008   *
0009   * Copyright (c) 2017 STMicroelectronics.
0010   * All rights reserved.
0011   *
0012   * This software is licensed under terms that can be found in the LICENSE file
0013   * in the root directory of this software component.
0014   * If no LICENSE file comes with this software, it is provided AS-IS.
0015   *
0016   ******************************************************************************
0017   */
0018 
0019 /* Define to prevent recursive inclusion -------------------------------------*/
0020 #ifndef STM32H7xx_HAL_GPIO_H
0021 #define STM32H7xx_HAL_GPIO_H
0022 
0023 #ifdef __cplusplus
0024 extern "C" {
0025 #endif
0026 
0027 /* Includes ------------------------------------------------------------------*/
0028 #include "stm32h7xx_hal_def.h"
0029 
0030 /** @addtogroup STM32H7xx_HAL_Driver
0031   * @{
0032   */
0033 
0034 /** @addtogroup GPIO
0035   * @{
0036   */
0037 
0038 /* Exported types ------------------------------------------------------------*/
0039 /** @defgroup GPIO_Exported_Types GPIO Exported Types
0040   * @ingroup RTEMSBSPsARMSTM32H7
0041   * @{
0042   */
0043 
0044 /**
0045   * @brief   GPIO Init structure definition
0046   */
0047 typedef struct
0048 {
0049   uint32_t Pin;       /*!< Specifies the GPIO pins to be configured.
0050                            This parameter can be any value of @ref GPIO_pins_define */
0051 
0052   uint32_t Mode;      /*!< Specifies the operating mode for the selected pins.
0053                            This parameter can be a value of @ref GPIO_mode_define */
0054 
0055   uint32_t Pull;      /*!< Specifies the Pull-up or Pull-Down activation for the selected pins.
0056                            This parameter can be a value of @ref GPIO_pull_define */
0057 
0058   uint32_t Speed;     /*!< Specifies the speed for the selected pins.
0059                            This parameter can be a value of @ref GPIO_speed_define */
0060 
0061   uint32_t Alternate;  /*!< Peripheral to be connected to the selected pins.
0062                             This parameter can be a value of @ref GPIO_Alternate_function_selection */
0063 } GPIO_InitTypeDef;
0064 
0065 /**
0066   * @brief  GPIO Bit SET and Bit RESET enumeration
0067   */
0068 typedef enum
0069 {
0070   GPIO_PIN_RESET = 0U,
0071   GPIO_PIN_SET
0072 } GPIO_PinState;
0073 /**
0074   * @}
0075   */
0076 
0077 /* Exported constants --------------------------------------------------------*/
0078 
0079 /** @defgroup GPIO_Exported_Constants  GPIO Exported Constants
0080   * @ingroup RTEMSBSPsARMSTM32H7
0081   * @{
0082   */
0083 
0084 /** @defgroup GPIO_pins_define  GPIO pins define
0085   * @ingroup RTEMSBSPsARMSTM32H7
0086   * @{
0087   */
0088 #define GPIO_PIN_0                 ((uint16_t)0x0001)  /* Pin 0 selected    */
0089 #define GPIO_PIN_1                 ((uint16_t)0x0002)  /* Pin 1 selected    */
0090 #define GPIO_PIN_2                 ((uint16_t)0x0004)  /* Pin 2 selected    */
0091 #define GPIO_PIN_3                 ((uint16_t)0x0008)  /* Pin 3 selected    */
0092 #define GPIO_PIN_4                 ((uint16_t)0x0010)  /* Pin 4 selected    */
0093 #define GPIO_PIN_5                 ((uint16_t)0x0020)  /* Pin 5 selected    */
0094 #define GPIO_PIN_6                 ((uint16_t)0x0040)  /* Pin 6 selected    */
0095 #define GPIO_PIN_7                 ((uint16_t)0x0080)  /* Pin 7 selected    */
0096 #define GPIO_PIN_8                 ((uint16_t)0x0100)  /* Pin 8 selected    */
0097 #define GPIO_PIN_9                 ((uint16_t)0x0200)  /* Pin 9 selected    */
0098 #define GPIO_PIN_10                ((uint16_t)0x0400)  /* Pin 10 selected   */
0099 #define GPIO_PIN_11                ((uint16_t)0x0800)  /* Pin 11 selected   */
0100 #define GPIO_PIN_12                ((uint16_t)0x1000)  /* Pin 12 selected   */
0101 #define GPIO_PIN_13                ((uint16_t)0x2000)  /* Pin 13 selected   */
0102 #define GPIO_PIN_14                ((uint16_t)0x4000)  /* Pin 14 selected   */
0103 #define GPIO_PIN_15                ((uint16_t)0x8000)  /* Pin 15 selected   */
0104 #define GPIO_PIN_All               ((uint16_t)0xFFFF)  /* All pins selected */
0105 
0106 #define GPIO_PIN_MASK              (0x0000FFFFU) /* PIN mask for assert test */
0107 /**
0108   * @}
0109   */
0110 
0111 /** @defgroup GPIO_mode_define  GPIO mode define
0112   * @ingroup RTEMSBSPsARMSTM32H7
0113   * @brief GPIO Configuration Mode
0114   *        Elements values convention: 0x00WX00YZ
0115   *           - W  : EXTI trigger detection on 3 bits
0116   *           - X  : EXTI mode (IT or Event) on 2 bits
0117   *           - Y  : Output type (Push Pull or Open Drain) on 1 bit
0118   *           - Z  : GPIO mode (Input, Output, Alternate or Analog) on 2 bits
0119   * @{
0120   */
0121 #define GPIO_MODE_INPUT                 MODE_INPUT                                                  /*!< Input Floating Mode                                                */
0122 #define GPIO_MODE_OUTPUT_PP             (MODE_OUTPUT | OUTPUT_PP)                                   /*!< Output Push Pull Mode                                              */
0123 #define GPIO_MODE_OUTPUT_OD             (MODE_OUTPUT | OUTPUT_OD)                                   /*!< Output Open Drain Mode                                             */
0124 #define GPIO_MODE_AF_PP                 (MODE_AF | OUTPUT_PP)                                       /*!< Alternate Function Push Pull Mode                                  */
0125 #define GPIO_MODE_AF_OD                 (MODE_AF | OUTPUT_OD)                                       /*!< Alternate Function Open Drain Mode                                 */
0126 #define GPIO_MODE_ANALOG                MODE_ANALOG                                                 /*!< Analog Mode                                                        */
0127 #define GPIO_MODE_IT_RISING             (MODE_INPUT | EXTI_IT | TRIGGER_RISING)                     /*!< External Interrupt Mode with Rising edge trigger detection         */
0128 #define GPIO_MODE_IT_FALLING            (MODE_INPUT | EXTI_IT | TRIGGER_FALLING)                    /*!< External Interrupt Mode with Falling edge trigger detection        */
0129 #define GPIO_MODE_IT_RISING_FALLING     (MODE_INPUT | EXTI_IT | TRIGGER_RISING | TRIGGER_FALLING)   /*!< External Interrupt Mode with Rising/Falling edge trigger detection */
0130 
0131 #define GPIO_MODE_EVT_RISING            (MODE_INPUT | EXTI_EVT | TRIGGER_RISING)                    /*!< External Event Mode with Rising edge trigger detection             */
0132 #define GPIO_MODE_EVT_FALLING           (MODE_INPUT | EXTI_EVT | TRIGGER_FALLING)                   /*!< External Event Mode with Falling edge trigger detection            */
0133 #define GPIO_MODE_EVT_RISING_FALLING    (MODE_INPUT | EXTI_EVT | TRIGGER_RISING | TRIGGER_FALLING)  /*!< External Event Mode with Rising/Falling edge trigger detection     */
0134 /**
0135   * @}
0136   */
0137 
0138 /** @defgroup GPIO_speed_define  GPIO speed define
0139   * @ingroup RTEMSBSPsARMSTM32H7
0140   * @brief GPIO Output Maximum frequency
0141   * @{
0142   */
0143 #define  GPIO_SPEED_FREQ_LOW         (0x00000000U)  /*!< Low speed     */
0144 #define  GPIO_SPEED_FREQ_MEDIUM      (0x00000001U)  /*!< Medium speed  */
0145 #define  GPIO_SPEED_FREQ_HIGH        (0x00000002U)  /*!< Fast speed    */
0146 #define  GPIO_SPEED_FREQ_VERY_HIGH   (0x00000003U)  /*!< High speed    */
0147 /**
0148   * @}
0149   */
0150 
0151 /** @defgroup GPIO_pull_define  GPIO pull define
0152   * @ingroup RTEMSBSPsARMSTM32H7
0153   * @brief GPIO Pull-Up or Pull-Down Activation
0154   * @{
0155   */
0156 #define  GPIO_NOPULL        (0x00000000U)   /*!< No Pull-up or Pull-down activation  */
0157 #define  GPIO_PULLUP        (0x00000001U)   /*!< Pull-up activation                  */
0158 #define  GPIO_PULLDOWN      (0x00000002U)   /*!< Pull-down activation                */
0159 /**
0160   * @}
0161   */
0162 
0163 /**
0164   * @}
0165   */
0166 
0167 /* Exported macro ------------------------------------------------------------*/
0168 /** @defgroup GPIO_Exported_Macros GPIO Exported Macros
0169   * @ingroup RTEMSBSPsARMSTM32H7
0170   * @{
0171   */
0172 
0173 /**
0174   * @brief  Checks whether the specified EXTI line flag is set or not.
0175   * @param  __EXTI_LINE__: specifies the EXTI line flag to check.
0176   *         This parameter can be GPIO_PIN_x where x can be(0..15)
0177   * @retval The new state of __EXTI_LINE__ (SET or RESET).
0178   */
0179 #define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) (EXTI->PR1 & (__EXTI_LINE__))
0180 
0181 /**
0182   * @brief  Clears the EXTI's line pending flags.
0183   * @param  __EXTI_LINE__: specifies the EXTI lines flags to clear.
0184   *         This parameter can be any combination of GPIO_PIN_x where x can be (0..15)
0185   * @retval None
0186   */
0187 #define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__) (EXTI->PR1 = (__EXTI_LINE__))
0188 
0189 /**
0190   * @brief  Checks whether the specified EXTI line is asserted or not.
0191   * @param  __EXTI_LINE__: specifies the EXTI line to check.
0192   *          This parameter can be GPIO_PIN_x where x can be(0..15)
0193   * @retval The new state of __EXTI_LINE__ (SET or RESET).
0194   */
0195 #define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (EXTI->PR1 & (__EXTI_LINE__))
0196 
0197 /**
0198   * @brief  Clears the EXTI's line pending bits.
0199   * @param  __EXTI_LINE__: specifies the EXTI lines to clear.
0200   *          This parameter can be any combination of GPIO_PIN_x where x can be (0..15)
0201   * @retval None
0202   */
0203 #define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) (EXTI->PR1 = (__EXTI_LINE__))
0204 
0205 #if defined(DUAL_CORE)
0206 /**
0207   * @brief  Checks whether the specified EXTI line flag is set or not.
0208   * @param  __EXTI_LINE__: specifies the EXTI line flag to check.
0209   *         This parameter can be GPIO_PIN_x where x can be(0..15)
0210   * @retval The new state of __EXTI_LINE__ (SET or RESET).
0211   */
0212 #define __HAL_GPIO_EXTID2_GET_FLAG(__EXTI_LINE__) (EXTI->C2PR1 & (__EXTI_LINE__))
0213 
0214 /**
0215   * @brief  Clears the EXTI's line pending flags.
0216   * @param  __EXTI_LINE__: specifies the EXTI lines flags to clear.
0217   *         This parameter can be any combination of GPIO_PIN_x where x can be (0..15)
0218   * @retval None
0219   */
0220 #define __HAL_GPIO_EXTID2_CLEAR_FLAG(__EXTI_LINE__) (EXTI->C2PR1 = (__EXTI_LINE__))
0221 
0222 /**
0223   * @brief  Checks whether the specified EXTI line is asserted or not.
0224   * @param  __EXTI_LINE__: specifies the EXTI line to check.
0225   *          This parameter can be GPIO_PIN_x where x can be(0..15)
0226   * @retval The new state of __EXTI_LINE__ (SET or RESET).
0227   */
0228 #define __HAL_GPIO_EXTID2_GET_IT(__EXTI_LINE__) (EXTI->C2PR1 & (__EXTI_LINE__))
0229 
0230 /**
0231   * @brief  Clears the EXTI's line pending bits.
0232   * @param  __EXTI_LINE__: specifies the EXTI lines to clear.
0233   *          This parameter can be any combination of GPIO_PIN_x where x can be (0..15)
0234   * @retval None
0235   */
0236 #define __HAL_GPIO_EXTID2_CLEAR_IT(__EXTI_LINE__) (EXTI->C2PR1 = (__EXTI_LINE__))
0237 #endif
0238 
0239 /**
0240   * @brief  Generates a Software interrupt on selected EXTI line.
0241   * @param  __EXTI_LINE__: specifies the EXTI line to check.
0242   *          This parameter can be GPIO_PIN_x where x can be(0..15)
0243   * @retval None
0244   */
0245 #define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER1 |= (__EXTI_LINE__))
0246 /**
0247   * @}
0248   */
0249 
0250 /* Include GPIO HAL Extension module */
0251 #include "stm32h7xx_hal_gpio_ex.h"
0252 
0253 /* Exported functions --------------------------------------------------------*/
0254 /** @addtogroup GPIO_Exported_Functions
0255   * @{
0256   */
0257 
0258 /** @addtogroup GPIO_Exported_Functions_Group1
0259   * @{
0260   */
0261 /* Initialization and de-initialization functions *****************************/
0262 void  HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init);
0263 void  HAL_GPIO_DeInit(GPIO_TypeDef  *GPIOx, uint32_t GPIO_Pin);
0264 /**
0265   * @}
0266   */
0267 
0268 /** @addtogroup GPIO_Exported_Functions_Group2
0269   * @{
0270   */
0271 /* IO operation functions *****************************************************/
0272 GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
0273 void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
0274 void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
0275 HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
0276 void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
0277 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
0278 
0279 /**
0280   * @}
0281   */
0282 
0283 /**
0284   * @}
0285   */
0286 /* Private types -------------------------------------------------------------*/
0287 /* Private variables ---------------------------------------------------------*/
0288 /* Private constants ---------------------------------------------------------*/
0289 /** @defgroup GPIO_Private_Constants GPIO Private Constants
0290   * @ingroup RTEMSBSPsARMSTM32H7
0291   * @{
0292   */
0293 #define GPIO_MODE_Pos                           0u
0294 #define GPIO_MODE                               (0x3uL << GPIO_MODE_Pos)
0295 #define MODE_INPUT                              (0x0uL << GPIO_MODE_Pos)
0296 #define MODE_OUTPUT                             (0x1uL << GPIO_MODE_Pos)
0297 #define MODE_AF                                 (0x2uL << GPIO_MODE_Pos)
0298 #define MODE_ANALOG                             (0x3uL << GPIO_MODE_Pos)
0299 #define OUTPUT_TYPE_Pos                         4u
0300 #define OUTPUT_TYPE                             (0x1uL << OUTPUT_TYPE_Pos)
0301 #define OUTPUT_PP                               (0x0uL << OUTPUT_TYPE_Pos)
0302 #define OUTPUT_OD                               (0x1uL << OUTPUT_TYPE_Pos)
0303 #define EXTI_MODE_Pos                           16u
0304 #define EXTI_MODE                               (0x3uL << EXTI_MODE_Pos)
0305 #define EXTI_IT                                 (0x1uL << EXTI_MODE_Pos)
0306 #define EXTI_EVT                                (0x2uL << EXTI_MODE_Pos)
0307 #define TRIGGER_MODE_Pos                         20u
0308 #define TRIGGER_MODE                            (0x7uL << TRIGGER_MODE_Pos)
0309 #define TRIGGER_RISING                          (0x1uL << TRIGGER_MODE_Pos)
0310 #define TRIGGER_FALLING                         (0x2uL << TRIGGER_MODE_Pos)
0311 #define TRIGGER_LEVEL                           (0x4uL << TRIGGER_MODE_Pos)
0312 /**
0313   * @}
0314   */
0315 
0316 /* Private macros ------------------------------------------------------------*/
0317 /** @defgroup GPIO_Private_Macros GPIO Private Macros
0318   * @ingroup RTEMSBSPsARMSTM32H7
0319   * @{
0320   */
0321 #define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))
0322 #define IS_GPIO_PIN(__PIN__)        ((((uint32_t)(__PIN__) & GPIO_PIN_MASK) != 0x00U) &&\
0323                                      (((uint32_t)(__PIN__) & ~GPIO_PIN_MASK) == 0x00U))
0324 #define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT)              ||\
0325                             ((MODE) == GPIO_MODE_OUTPUT_PP)          ||\
0326                             ((MODE) == GPIO_MODE_OUTPUT_OD)          ||\
0327                             ((MODE) == GPIO_MODE_AF_PP)              ||\
0328                             ((MODE) == GPIO_MODE_AF_OD)              ||\
0329                             ((MODE) == GPIO_MODE_IT_RISING)          ||\
0330                             ((MODE) == GPIO_MODE_IT_FALLING)         ||\
0331                             ((MODE) == GPIO_MODE_IT_RISING_FALLING)  ||\
0332                             ((MODE) == GPIO_MODE_EVT_RISING)         ||\
0333                             ((MODE) == GPIO_MODE_EVT_FALLING)        ||\
0334                             ((MODE) == GPIO_MODE_EVT_RISING_FALLING) ||\
0335                             ((MODE) == GPIO_MODE_ANALOG))
0336 #define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_SPEED_FREQ_LOW)  || ((SPEED) == GPIO_SPEED_FREQ_MEDIUM) || \
0337                               ((SPEED) == GPIO_SPEED_FREQ_HIGH) || ((SPEED) == GPIO_SPEED_FREQ_VERY_HIGH))
0338 
0339 #define IS_GPIO_PULL(PULL) (((PULL) == GPIO_NOPULL) || ((PULL) == GPIO_PULLUP) || \
0340                             ((PULL) == GPIO_PULLDOWN))
0341 
0342 /**
0343   * @}
0344   */
0345 
0346 /* Private functions ---------------------------------------------------------*/
0347 /** @defgroup GPIO_Private_Functions GPIO Private Functions
0348   * @ingroup RTEMSBSPsARMSTM32H7
0349   * @{
0350   */
0351 
0352 /**
0353   * @}
0354   */
0355 
0356 /**
0357   * @}
0358   */
0359 
0360 /**
0361   * @}
0362   */
0363 
0364 #ifdef __cplusplus
0365 }
0366 #endif
0367 
0368 #endif /* STM32H7xx_HAL_GPIO_H */
0369