STM32F4xx_HAL_Driver  1.8.3
stm32f4xx_hal_exti.h
Go to the documentation of this file.
1 
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef STM32f4xx_HAL_EXTI_H
21 #define STM32f4xx_HAL_EXTI_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32f4xx_hal_def.h"
29 
39 /* Exported types ------------------------------------------------------------*/
40 
44 typedef enum
45 {
46  HAL_EXTI_COMMON_CB_ID = 0x00U
47 } EXTI_CallbackIDTypeDef;
48 
52 typedef struct
53 {
54  uint32_t Line;
55  void (* PendingCallback)(void);
57 
61 typedef struct
62 {
63  uint32_t Line;
65  uint32_t Mode;
67  uint32_t Trigger;
69  uint32_t GPIOSel;
73 
78 /* Exported constants --------------------------------------------------------*/
86 #define EXTI_LINE_0 (EXTI_GPIO | 0x00u)
87 #define EXTI_LINE_1 (EXTI_GPIO | 0x01u)
88 #define EXTI_LINE_2 (EXTI_GPIO | 0x02u)
89 #define EXTI_LINE_3 (EXTI_GPIO | 0x03u)
90 #define EXTI_LINE_4 (EXTI_GPIO | 0x04u)
91 #define EXTI_LINE_5 (EXTI_GPIO | 0x05u)
92 #define EXTI_LINE_6 (EXTI_GPIO | 0x06u)
93 #define EXTI_LINE_7 (EXTI_GPIO | 0x07u)
94 #define EXTI_LINE_8 (EXTI_GPIO | 0x08u)
95 #define EXTI_LINE_9 (EXTI_GPIO | 0x09u)
96 #define EXTI_LINE_10 (EXTI_GPIO | 0x0Au)
97 #define EXTI_LINE_11 (EXTI_GPIO | 0x0Bu)
98 #define EXTI_LINE_12 (EXTI_GPIO | 0x0Cu)
99 #define EXTI_LINE_13 (EXTI_GPIO | 0x0Du)
100 #define EXTI_LINE_14 (EXTI_GPIO | 0x0Eu)
101 #define EXTI_LINE_15 (EXTI_GPIO | 0x0Fu)
102 #define EXTI_LINE_16 (EXTI_CONFIG | 0x10u)
103 #define EXTI_LINE_17 (EXTI_CONFIG | 0x11u)
104 #if defined(EXTI_IMR_IM18)
105 #define EXTI_LINE_18 (EXTI_CONFIG | 0x12u)
106 #else
107 #define EXTI_LINE_18 (EXTI_RESERVED | 0x12u)
108 #endif /* EXTI_IMR_IM18 */
109 #if defined(EXTI_IMR_IM19)
110 #define EXTI_LINE_19 (EXTI_CONFIG | 0x13u)
111 #else
112 #define EXTI_LINE_19 (EXTI_RESERVED | 0x13u)
113 #endif /* EXTI_IMR_IM19 */
114 #if defined(EXTI_IMR_IM20)
115 #define EXTI_LINE_20 (EXTI_CONFIG | 0x14u)
116 #else
117 #define EXTI_LINE_20 (EXTI_RESERVED | 0x14u)
118 #endif /* EXTI_IMR_IM20 */
119 #define EXTI_LINE_21 (EXTI_CONFIG | 0x15u)
120 #define EXTI_LINE_22 (EXTI_CONFIG | 0x16u)
121 #if defined(EXTI_IMR_IM23)
122 #define EXTI_LINE_23 (EXTI_CONFIG | 0x17u)
123 #endif /* EXTI_IMR_IM23 */
124 
132 #define EXTI_MODE_NONE 0x00000000u
133 #define EXTI_MODE_INTERRUPT 0x00000001u
134 #define EXTI_MODE_EVENT 0x00000002u
143 #define EXTI_TRIGGER_NONE 0x00000000u
144 #define EXTI_TRIGGER_RISING 0x00000001u
145 #define EXTI_TRIGGER_FALLING 0x00000002u
146 #define EXTI_TRIGGER_RISING_FALLING (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING)
155 #define EXTI_GPIOA 0x00000000u
156 #define EXTI_GPIOB 0x00000001u
157 #define EXTI_GPIOC 0x00000002u
158 #if defined (GPIOD)
159 #define EXTI_GPIOD 0x00000003u
160 #endif /* GPIOD */
161 #if defined (GPIOE)
162 #define EXTI_GPIOE 0x00000004u
163 #endif /* GPIOE */
164 #if defined (GPIOF)
165 #define EXTI_GPIOF 0x00000005u
166 #endif /* GPIOF */
167 #if defined (GPIOG)
168 #define EXTI_GPIOG 0x00000006u
169 #endif /* GPIOG */
170 #if defined (GPIOH)
171 #define EXTI_GPIOH 0x00000007u
172 #endif /* GPIOH */
173 #if defined (GPIOI)
174 #define EXTI_GPIOI 0x00000008u
175 #endif /* GPIOI */
176 #if defined (GPIOJ)
177 #define EXTI_GPIOJ 0x00000009u
178 #endif /* GPIOJ */
179 #if defined (GPIOK)
180 #define EXTI_GPIOK 0x0000000Au
181 #endif /* GPIOK */
182 
191 /* Exported macro ------------------------------------------------------------*/
200 /* Private constants --------------------------------------------------------*/
207 #define EXTI_PROPERTY_SHIFT 24u
208 #define EXTI_CONFIG (0x02uL << EXTI_PROPERTY_SHIFT)
209 #define EXTI_GPIO ((0x04uL << EXTI_PROPERTY_SHIFT) | EXTI_CONFIG)
210 #define EXTI_RESERVED (0x08uL << EXTI_PROPERTY_SHIFT)
211 #define EXTI_PROPERTY_MASK (EXTI_CONFIG | EXTI_GPIO)
212 
216 #define EXTI_PIN_MASK 0x0000001Fu
217 
221 #define EXTI_MODE_MASK (EXTI_MODE_EVENT | EXTI_MODE_INTERRUPT)
222 
226 #define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING)
227 
231 #if defined(EXTI_IMR_IM23)
232 #define EXTI_LINE_NB 24UL
233 #else
234 #define EXTI_LINE_NB 23UL
235 #endif /* EXTI_IMR_IM23 */
236 
241 /* Private macros ------------------------------------------------------------*/
245 #define IS_EXTI_LINE(__EXTI_LINE__) ((((__EXTI_LINE__) & ~(EXTI_PROPERTY_MASK | EXTI_PIN_MASK)) == 0x00u) && \
246  ((((__EXTI_LINE__) & EXTI_PROPERTY_MASK) == EXTI_CONFIG) || \
247  (((__EXTI_LINE__) & EXTI_PROPERTY_MASK) == EXTI_GPIO)) && \
248  (((__EXTI_LINE__) & EXTI_PIN_MASK) < EXTI_LINE_NB))
249 
250 #define IS_EXTI_MODE(__EXTI_LINE__) ((((__EXTI_LINE__) & EXTI_MODE_MASK) != 0x00u) && \
251  (((__EXTI_LINE__) & ~EXTI_MODE_MASK) == 0x00u))
252 
253 #define IS_EXTI_TRIGGER(__EXTI_LINE__) (((__EXTI_LINE__) & ~EXTI_TRIGGER_MASK) == 0x00u)
254 
255 #define IS_EXTI_PENDING_EDGE(__EXTI_LINE__) ((__EXTI_LINE__) == EXTI_TRIGGER_RISING_FALLING)
256 
257 #define IS_EXTI_CONFIG_LINE(__EXTI_LINE__) (((__EXTI_LINE__) & EXTI_CONFIG) != 0x00u)
258 
259 #if !defined (GPIOD)
260 #define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
261  ((__PORT__) == EXTI_GPIOB) || \
262  ((__PORT__) == EXTI_GPIOC) || \
263  ((__PORT__) == EXTI_GPIOH))
264 #elif !defined (GPIOE)
265 #define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
266  ((__PORT__) == EXTI_GPIOB) || \
267  ((__PORT__) == EXTI_GPIOC) || \
268  ((__PORT__) == EXTI_GPIOD) || \
269  ((__PORT__) == EXTI_GPIOH))
270 #elif !defined (GPIOF)
271 #define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
272  ((__PORT__) == EXTI_GPIOB) || \
273  ((__PORT__) == EXTI_GPIOC) || \
274  ((__PORT__) == EXTI_GPIOD) || \
275  ((__PORT__) == EXTI_GPIOE) || \
276  ((__PORT__) == EXTI_GPIOH))
277 #elif !defined (GPIOI)
278 #define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
279  ((__PORT__) == EXTI_GPIOB) || \
280  ((__PORT__) == EXTI_GPIOC) || \
281  ((__PORT__) == EXTI_GPIOD) || \
282  ((__PORT__) == EXTI_GPIOE) || \
283  ((__PORT__) == EXTI_GPIOF) || \
284  ((__PORT__) == EXTI_GPIOG) || \
285  ((__PORT__) == EXTI_GPIOH))
286 #elif !defined (GPIOJ)
287 #define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
288  ((__PORT__) == EXTI_GPIOB) || \
289  ((__PORT__) == EXTI_GPIOC) || \
290  ((__PORT__) == EXTI_GPIOD) || \
291  ((__PORT__) == EXTI_GPIOE) || \
292  ((__PORT__) == EXTI_GPIOF) || \
293  ((__PORT__) == EXTI_GPIOG) || \
294  ((__PORT__) == EXTI_GPIOH) || \
295  ((__PORT__) == EXTI_GPIOI))
296 #else
297 #define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
298  ((__PORT__) == EXTI_GPIOB) || \
299  ((__PORT__) == EXTI_GPIOC) || \
300  ((__PORT__) == EXTI_GPIOD) || \
301  ((__PORT__) == EXTI_GPIOE) || \
302  ((__PORT__) == EXTI_GPIOF) || \
303  ((__PORT__) == EXTI_GPIOG) || \
304  ((__PORT__) == EXTI_GPIOH) || \
305  ((__PORT__) == EXTI_GPIOI) || \
306  ((__PORT__) == EXTI_GPIOJ) || \
307  ((__PORT__) == EXTI_GPIOK))
308 #endif /* GPIOD */
309 
310 #define IS_EXTI_GPIO_PIN(__PIN__) ((__PIN__) < 16U)
315 /* Exported functions --------------------------------------------------------*/
325 /* Configuration functions ****************************************************/
326 HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig);
327 HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig);
328 HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti);
329 HAL_StatusTypeDef HAL_EXTI_RegisterCallback(EXTI_HandleTypeDef *hexti, EXTI_CallbackIDTypeDef CallbackID, void (*pPendingCbfn)(void));
330 HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLine);
339 /* IO operation functions *****************************************************/
341 uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge);
342 void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge);
344 
361 #ifdef __cplusplus
362 }
363 #endif
364 
365 #endif /* STM32f4xx_HAL_EXTI_H */
366 
HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
Set configuration of a dedicated Exti line.
HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLine)
Store line number as handle private field.
HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
Get configuration of a dedicated Exti line.
HAL_StatusTypeDef HAL_EXTI_RegisterCallback(EXTI_HandleTypeDef *hexti, EXTI_CallbackIDTypeDef CallbackID, void(*pPendingCbfn)(void))
Register callback for a dedicated Exti line.
HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti)
Clear whole configuration of a dedicated Exti line.
void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
Handle EXTI interrupt request.
void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti)
Generate a software interrupt for a dedicated line.
uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
Get interrupt pending bit of a dedicated line.
void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
Clear interrupt pending bit of a dedicated line.
EXTI Configuration structure definition.
EXTI Handle structure definition.
This file contains HAL common defines, enumeration, macros and structures definitions.