xref: /btstack/port/stm32-l073rz-nucleo-em9304/Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_gpio.h (revision e838079242074edcbcbb400962776e15fe6ca6cb)
1 /**
2   ******************************************************************************
3   * @file    stm32l0xx_hal_gpio.h
4   * @author  MCD Application Team
5   * @brief   Header file of GPIO HAL module.
6   ******************************************************************************
7   * @attention
8   *
9   * <h2><center>&copy; Copyright(c) 2016 STMicroelectronics.
10   * All rights reserved.</center></h2>
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 __STM32L0xx_HAL_GPIO_H
22 #define __STM32L0xx_HAL_GPIO_H
23 
24 #ifdef __cplusplus
25  extern "C" {
26 #endif
27 
28 /* Includes ------------------------------------------------------------------*/
29 #include "stm32l0xx_hal_def.h"
30 
31 /** @addtogroup STM32L0xx_HAL_Driver
32   * @{
33   */
34 
35 /** @defgroup GPIO GPIO
36   * @{
37   */
38 /******************************************************************************/
39 /* Exported types ------------------------------------------------------------*/
40 /******************************************************************************/
41 
42 /** @defgroup GPIO_Exported_Types GPIO Exported Types
43   * @{
44   */
45 
46 /** @defgroup GPIO_Init_Configuration GPIO init configuration structure
47   * @{
48   */
49 /**
50   * @brief   GPIO Init structure definition
51   */
52 typedef struct
53 {
54   uint32_t Pin;       /*!< Specifies the GPIO pins to be configured.
55                            This parameter can be a combination of @ref GPIO_pins_define */
56 
57   uint32_t Mode;      /*!< Specifies the operating mode for the selected pins.
58                            This parameter can be a value of @ref GPIO_mode_define */
59 
60   uint32_t Pull;      /*!< Specifies the Pull-up or Pull-Down activation for the selected pins.
61                            This parameter can be a value of @ref GPIO_pull_define */
62 
63   uint32_t Speed;     /*!< Specifies the speed for the selected pins.
64                            This parameter can be a value of @ref GPIO_speed_define */
65 
66   uint32_t Alternate;  /*!< Peripheral to be connected to the selected pins
67                             This parameter can be a value of @ref GPIOEx_Alternate_function_selection */
68 }GPIO_InitTypeDef;
69 /**
70   * @}
71   */
72 
73 /** @defgroup GPIO_SetReset_Definition  GPIO set reset definition
74   * @{
75   */
76 /**
77   * @brief  GPIO Bit SET and Bit RESET enumeration
78   */
79 typedef enum
80 {
81   GPIO_PIN_RESET = 0U,
82   GPIO_PIN_SET
83 }GPIO_PinState;
84 /**
85   * @}
86   */
87 
88 
89 #define IS_GPIO_PIN_ACTION(__ACTION__) (((__ACTION__) == GPIO_PIN_RESET) || ((__ACTION__) == GPIO_PIN_SET))
90 
91 /**
92   * @}
93   */
94 /******************************************************************************/
95 /* Exported constants --------------------------------------------------------*/
96 /******************************************************************************/
97 
98 /** @defgroup GPIO_Exported_Constants GPIO Exported Constants
99   * @{
100   */
101 
102 /** @defgroup GPIO_pins_define Pin definition
103   * @{
104   */
105 #define GPIO_PIN_0                 ((uint16_t)0x0001U)  /* Pin 0 selected    */
106 #define GPIO_PIN_1                 ((uint16_t)0x0002U)  /* Pin 1 selected    */
107 #define GPIO_PIN_2                 ((uint16_t)0x0004U)  /* Pin 2 selected    */
108 #define GPIO_PIN_3                 ((uint16_t)0x0008U)  /* Pin 3 selected    */
109 #define GPIO_PIN_4                 ((uint16_t)0x0010U)  /* Pin 4 selected    */
110 #define GPIO_PIN_5                 ((uint16_t)0x0020U)  /* Pin 5 selected    */
111 #define GPIO_PIN_6                 ((uint16_t)0x0040U)  /* Pin 6 selected    */
112 #define GPIO_PIN_7                 ((uint16_t)0x0080U)  /* Pin 7 selected    */
113 #define GPIO_PIN_8                 ((uint16_t)0x0100U)  /* Pin 8 selected    */
114 #define GPIO_PIN_9                 ((uint16_t)0x0200U)  /* Pin 9 selected    */
115 #define GPIO_PIN_10                ((uint16_t)0x0400U)  /* Pin 10 selected   */
116 #define GPIO_PIN_11                ((uint16_t)0x0800U)  /* Pin 11 selected   */
117 #define GPIO_PIN_12                ((uint16_t)0x1000U)  /* Pin 12 selected   */
118 #define GPIO_PIN_13                ((uint16_t)0x2000U)  /* Pin 13 selected   */
119 #define GPIO_PIN_14                ((uint16_t)0x4000U)  /* Pin 14 selected   */
120 #define GPIO_PIN_15                ((uint16_t)0x8000U)  /* Pin 15 selected   */
121 #define GPIO_PIN_All               ((uint16_t)0xFFFFU)  /* All pins selected */
122 /**
123   * @}
124   */
125 
126 #define GPIO_PIN_MASK              ((uint32_t)0x0000FFFFU) /* PIN mask for assert test */
127 #define IS_GPIO_PIN(__PIN__)        ((((__PIN__) & GPIO_PIN_MASK) != (uint32_t)0x00) &&\
128                                      (((__PIN__) & ~GPIO_PIN_MASK) == (uint32_t)0x00))
129 
130 /** @defgroup GPIO_mode_define Mode definition
131   * @brief GPIO Configuration Mode
132   *        Elements values convention: 0xX0yz00YZ
133   *           - X  : GPIO mode or EXTI Mode
134   *           - y  : External IT or Event trigger detection
135   *           - z  : IO configuration on External IT or Event
136   *           - Y  : Output type (Push Pull or Open Drain)
137   *           - Z  : IO Direction mode (Input, Output, Alternate or Analog)
138   * @{
139   */
140 #define  GPIO_MODE_INPUT                        ((uint32_t)0x00000000U)   /*!< Input Floating Mode                   */
141 #define  GPIO_MODE_OUTPUT_PP                    ((uint32_t)0x00000001U)   /*!< Output Push Pull Mode                 */
142 #define  GPIO_MODE_OUTPUT_OD                    ((uint32_t)0x00000011U)   /*!< Output Open Drain Mode                */
143 #define  GPIO_MODE_AF_PP                        ((uint32_t)0x00000002U)   /*!< Alternate Function Push Pull Mode     */
144 #define  GPIO_MODE_AF_OD                        ((uint32_t)0x00000012U)   /*!< Alternate Function Open Drain Mode    */
145 
146 #define  GPIO_MODE_ANALOG                       ((uint32_t)0x00000003U)   /*!< Analog Mode  */
147 
148 #define  GPIO_MODE_IT_RISING                    ((uint32_t)0x10110000U)   /*!< External Interrupt Mode with Rising edge trigger detection          */
149 #define  GPIO_MODE_IT_FALLING                   ((uint32_t)0x10210000U)   /*!< External Interrupt Mode with Falling edge trigger detection         */
150 #define  GPIO_MODE_IT_RISING_FALLING            ((uint32_t)0x10310000U)   /*!< External Interrupt Mode with Rising/Falling edge trigger detection  */
151 
152 #define  GPIO_MODE_EVT_RISING                   ((uint32_t)0x10120000U)   /*!< External Event Mode with Rising edge trigger detection               */
153 #define  GPIO_MODE_EVT_FALLING                  ((uint32_t)0x10220000U)   /*!< External Event Mode with Falling edge trigger detection              */
154 #define  GPIO_MODE_EVT_RISING_FALLING           ((uint32_t)0x10320000U)   /*!< External Event Mode with Rising/Falling edge trigger detection       */
155 
156 /**
157   * @}
158   */
159 
160 #define IS_GPIO_MODE(__MODE__) (((__MODE__) == GPIO_MODE_INPUT)              ||\
161                                 ((__MODE__) == GPIO_MODE_OUTPUT_PP)          ||\
162                                 ((__MODE__) == GPIO_MODE_OUTPUT_OD)          ||\
163                                 ((__MODE__) == GPIO_MODE_AF_PP)              ||\
164                                 ((__MODE__) == GPIO_MODE_AF_OD)              ||\
165                                 ((__MODE__) == GPIO_MODE_IT_RISING)          ||\
166                                 ((__MODE__) == GPIO_MODE_IT_FALLING)         ||\
167                                 ((__MODE__) == GPIO_MODE_IT_RISING_FALLING)  ||\
168                                 ((__MODE__) == GPIO_MODE_EVT_RISING)         ||\
169                                 ((__MODE__) == GPIO_MODE_EVT_FALLING)        ||\
170                                 ((__MODE__) == GPIO_MODE_EVT_RISING_FALLING) ||\
171                                 ((__MODE__) == GPIO_MODE_ANALOG))
172 
173 
174 /** @defgroup GPIO_speed_define Speed definition
175   * @brief GPIO Output Maximum frequency
176   * @{
177   */
178 #define  GPIO_SPEED_FREQ_LOW              ((uint32_t)0x00000000U)  /*!< range up to 0.4 MHz, please refer to the product datasheet */
179 #define  GPIO_SPEED_FREQ_MEDIUM           ((uint32_t)0x00000001U)  /*!< range 0.4 MHz to 2 MHz, please refer to the product datasheet */
180 #define  GPIO_SPEED_FREQ_HIGH             ((uint32_t)0x00000002U)  /*!< range   2 MHz to 10 MHz, please refer to the product datasheet */
181 #define  GPIO_SPEED_FREQ_VERY_HIGH        ((uint32_t)0x00000003U)  /*!< range  10 MHz to 35 MHz, please refer to the product datasheet */
182 
183 /**
184   * @}
185   */
186 
187 #define IS_GPIO_SPEED(__SPEED__) (((__SPEED__) == GPIO_SPEED_FREQ_LOW     )  || ((__SPEED__) == GPIO_SPEED_FREQ_MEDIUM     ) || \
188                                   ((__SPEED__) == GPIO_SPEED_FREQ_HIGH  ) || ((__SPEED__) == GPIO_SPEED_FREQ_VERY_HIGH))
189 
190 
191  /** @defgroup GPIO_pull_define Pull definition
192    * @brief GPIO Pull-Up or Pull-Down Activation
193    * @{
194    */
195 #define  GPIO_NOPULL        ((uint32_t)0x00000000U)   /*!< No Pull-up or Pull-down activation  */
196 #define  GPIO_PULLUP        ((uint32_t)0x00000001U)   /*!< Pull-up activation                  */
197 #define  GPIO_PULLDOWN      ((uint32_t)0x00000002U)   /*!< Pull-down activation                */
198 
199 /**
200   * @}
201   */
202 
203 #define IS_GPIO_PULL(__PULL__) (((__PULL__) == GPIO_NOPULL) || ((__PULL__) == GPIO_PULLUP) || \
204                                 ((__PULL__) == GPIO_PULLDOWN))
205 
206 
207 /**
208   * @}
209   */
210 /******************************************************************************/
211 /* Exported macro ------------------------------------------------------------*/
212 /******************************************************************************/
213 /* Exported macro ------------------------------------------------------------*/
214 /** @defgroup GPIO_Exported_Macro GPIO Exported Macros
215   * @{
216   */
217 /**
218   * @brief  Checks whether the specified EXTI line flag is set or not.
219   * @param  __EXTI_LINE__ specifies the EXTI line flag to check.
220   *         This parameter can be GPIO_PIN_x where x can be(0..15)
221   * @retval The new state of __EXTI_LINE__ (SET or RESET).
222   */
223 #define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__))
224 
225 /**
226   * @brief  Clears the EXTI's line pending flags.
227   * @param  __EXTI_LINE__ specifies the EXTI lines flags to clear.
228   *         This parameter can be any combination of GPIO_PIN_x where x can be (0..15)
229   * @retval None
230   */
231 #define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__))
232 
233 /**
234   * @brief  Checks whether the specified EXTI line is asserted or not.
235   * @param  __EXTI_LINE__ specifies the EXTI line to check.
236   *          This parameter can be GPIO_PIN_x where x can be(0..15)
237   * @retval The new state of __EXTI_LINE__ (SET or RESET).
238   */
239 #define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__))
240 
241 /**
242   * @brief  Clears the EXTI's line pending bits.
243   * @param  __EXTI_LINE__ specifies the EXTI lines to clear.
244   *          This parameter can be any combination of GPIO_PIN_x where x can be (0..15)
245   * @retval None
246   */
247 #define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__))
248 
249 /**
250   * @brief  Generates a Software interrupt on selected EXTI line.
251   * @param  __EXTI_LINE__ specifies the EXTI line to check.
252   *          This parameter can be GPIO_PIN_x where x can be(0..15)
253   * @retval None
254   */
255 #define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER |= (__EXTI_LINE__))
256 
257 /**
258   * @}
259   */
260 /* Include GPIO HAL Extension module */
261 #include "stm32l0xx_hal_gpio_ex.h"
262 
263 /******************************************************************************/
264 /* Exported functions --------------------------------------------------------*/
265 /******************************************************************************/
266 
267 /* Exported functions --------------------------------------------------------*/
268 /** @defgroup GPIO_Exported_Functions GPIO Exported Functions
269   * @{
270   */
271 
272 /* Initialization and de-initialization functions *******************************/
273 /** @defgroup GPIO_Exported_Functions_Group1 Initialization and de-initialization functions
274  *  @{
275  */
276 void  HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init);
277 void  HAL_GPIO_DeInit(GPIO_TypeDef  *GPIOx, uint32_t GPIO_Pin);
278 /**
279   * @}
280   */
281 
282 /* IO operation functions *******************************************************/
283 /** @defgroup GPIO_Exported_Functions_Group2 IO operation functions
284  *  @{
285  */
286 GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
287 void          HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
288 void          HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
289 HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
290 void          HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
291 void          HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
292 /**
293   * @}
294   */
295 
296 /**
297   * @}
298   */
299 
300 /* Define the private group ***********************************/
301 /**************************************************************/
302 /** @defgroup GPIO_Private GPIO Private
303   * @{
304   */
305 /**
306   * @}
307   */
308 /**************************************************************/
309 
310 
311 /**
312   * @}
313   */
314 
315 /**
316   * @}
317   */
318 
319 #ifdef __cplusplus
320 }
321 #endif
322 
323 #endif /* __STM32L0xx_HAL_GPIO_H */
324 
325 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
326 
327