1 /**
2   ******************************************************************************
3   * @file    stm32f0xx_hal_pwr_ex.h
4   * @author  MCD Application Team
5   * @brief   Header file of PWR HAL Extension module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2016 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software is licensed under terms that can be found in the LICENSE file
13   * in the root directory of this software component.
14   * If no LICENSE file comes with this software, it is provided AS-IS.
15   *
16   ******************************************************************************
17   */
18 
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef __STM32F0xx_HAL_PWR_EX_H
21 #define __STM32F0xx_HAL_PWR_EX_H
22 
23 #ifdef __cplusplus
24  extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32f0xx_hal_def.h"
29 
30 /** @addtogroup STM32F0xx_HAL_Driver
31   * @{
32   */
33 
34 /** @addtogroup PWREx
35   * @{
36   */
37 
38 /* Exported types ------------------------------------------------------------*/
39 
40 /** @defgroup PWREx_Exported_Types PWREx Exported Types
41  *  @{
42  */
43 
44 #if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \
45     defined (STM32F071xB) || defined (STM32F072xB) || \
46     defined (STM32F091xC)
47 
48 /**
49   * @brief  PWR PVD configuration structure definition
50   */
51 typedef struct
52 {
53   uint32_t PVDLevel;   /*!< PVDLevel: Specifies the PVD detection level
54                             This parameter can be a value of @ref PWREx_PVD_detection_level */
55 
56   uint32_t Mode;       /*!< Mode: Specifies the operating mode for the selected pins.
57                             This parameter can be a value of @ref PWREx_PVD_Mode */
58 }PWR_PVDTypeDef;
59 
60 #endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */
61        /* defined (STM32F071xB) || defined (STM32F072xB) || */
62        /* defined (STM32F091xC) */
63 /**
64   * @}
65   */
66 /* Exported constants --------------------------------------------------------*/
67 
68 /** @defgroup PWREx_Exported_Constants PWREx Exported Constants
69   * @{
70   */
71 
72 
73 /** @defgroup PWREx_WakeUp_Pins PWREx Wakeup Pins
74   * @{
75   */
76 #if defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \
77     defined (STM32F091xC) || defined (STM32F098xx)
78 #define PWR_WAKEUP_PIN1                     ((uint32_t)PWR_CSR_EWUP1)
79 #define PWR_WAKEUP_PIN2                     ((uint32_t)PWR_CSR_EWUP2)
80 #define PWR_WAKEUP_PIN3                     ((uint32_t)PWR_CSR_EWUP3)
81 #define PWR_WAKEUP_PIN4                     ((uint32_t)PWR_CSR_EWUP4)
82 #define PWR_WAKEUP_PIN5                     ((uint32_t)PWR_CSR_EWUP5)
83 #define PWR_WAKEUP_PIN6                     ((uint32_t)PWR_CSR_EWUP6)
84 #define PWR_WAKEUP_PIN7                     ((uint32_t)PWR_CSR_EWUP7)
85 #define PWR_WAKEUP_PIN8                     ((uint32_t)PWR_CSR_EWUP8)
86 
87 #define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || \
88                                 ((PIN) == PWR_WAKEUP_PIN2) || \
89                                 ((PIN) == PWR_WAKEUP_PIN3) || \
90                                 ((PIN) == PWR_WAKEUP_PIN4) || \
91                                 ((PIN) == PWR_WAKEUP_PIN5) || \
92                                 ((PIN) == PWR_WAKEUP_PIN6) || \
93                                 ((PIN) == PWR_WAKEUP_PIN7) || \
94                                 ((PIN) == PWR_WAKEUP_PIN8))
95 
96 #elif defined(STM32F030xC) || defined (STM32F070xB)
97 #define PWR_WAKEUP_PIN1                     ((uint32_t)PWR_CSR_EWUP1)
98 #define PWR_WAKEUP_PIN2                     ((uint32_t)PWR_CSR_EWUP2)
99 #define PWR_WAKEUP_PIN4                     ((uint32_t)PWR_CSR_EWUP4)
100 #define PWR_WAKEUP_PIN5                     ((uint32_t)PWR_CSR_EWUP5)
101 #define PWR_WAKEUP_PIN6                     ((uint32_t)PWR_CSR_EWUP6)
102 #define PWR_WAKEUP_PIN7                     ((uint32_t)PWR_CSR_EWUP7)
103 
104 #define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || \
105                                 ((PIN) == PWR_WAKEUP_PIN2) || \
106                                 ((PIN) == PWR_WAKEUP_PIN4) || \
107                                 ((PIN) == PWR_WAKEUP_PIN5) || \
108                                 ((PIN) == PWR_WAKEUP_PIN6) || \
109                                 ((PIN) == PWR_WAKEUP_PIN7))
110 
111 #elif defined(STM32F042x6) || defined (STM32F048xx)
112 #define PWR_WAKEUP_PIN1                     ((uint32_t)PWR_CSR_EWUP1)
113 #define PWR_WAKEUP_PIN2                     ((uint32_t)PWR_CSR_EWUP2)
114 #define PWR_WAKEUP_PIN4                     ((uint32_t)PWR_CSR_EWUP4)
115 #define PWR_WAKEUP_PIN6                     ((uint32_t)PWR_CSR_EWUP6)
116 #define PWR_WAKEUP_PIN7                     ((uint32_t)PWR_CSR_EWUP7)
117 
118 #define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || \
119                                 ((PIN) == PWR_WAKEUP_PIN2) || \
120                                 ((PIN) == PWR_WAKEUP_PIN4) || \
121                                 ((PIN) == PWR_WAKEUP_PIN6) || \
122                                 ((PIN) == PWR_WAKEUP_PIN7))
123 
124 #else
125 #define PWR_WAKEUP_PIN1                     ((uint32_t)PWR_CSR_EWUP1)
126 #define PWR_WAKEUP_PIN2                     ((uint32_t)PWR_CSR_EWUP2)
127 
128 
129 #define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || \
130                                 ((PIN) == PWR_WAKEUP_PIN2))
131 
132 #endif
133 
134 /**
135   * @}
136   */
137 
138 /** @defgroup PWREx_EXTI_Line PWREx EXTI Line
139   * @{
140   */
141 #if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \
142     defined (STM32F071xB) || defined (STM32F072xB) || \
143     defined (STM32F091xC)
144 
145 #define PWR_EXTI_LINE_PVD                   ((uint32_t)EXTI_IMR_MR16)  /*!< External interrupt line 16 Connected to the PVD EXTI Line */
146 
147 #endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */
148        /* defined (STM32F071xB) || defined (STM32F072xB) || */
149        /* defined (STM32F091xC) */
150 
151 #if defined (STM32F042x6) || defined (STM32F048xx) || \
152     defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \
153     defined (STM32F091xC) || defined (STM32F098xx)
154 
155 #define PWR_EXTI_LINE_VDDIO2                ((uint32_t)EXTI_IMR_MR31)  /*!< External interrupt line 31 Connected to the Vddio2 Monitor EXTI Line */
156 
157 #endif /* defined (STM32F042x6) || defined (STM32F048xx) ||\
158           defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \
159           defined (STM32F091xC) || defined (STM32F098xx) ||*/
160 /**
161   * @}
162   */
163 
164 #if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \
165     defined (STM32F071xB) || defined (STM32F072xB) || \
166     defined (STM32F091xC)
167 /** @defgroup PWREx_PVD_detection_level PWREx PVD detection level
168   * @{
169   */
170 #define PWR_PVDLEVEL_0                      PWR_CR_PLS_LEV0
171 #define PWR_PVDLEVEL_1                      PWR_CR_PLS_LEV1
172 #define PWR_PVDLEVEL_2                      PWR_CR_PLS_LEV2
173 #define PWR_PVDLEVEL_3                      PWR_CR_PLS_LEV3
174 #define PWR_PVDLEVEL_4                      PWR_CR_PLS_LEV4
175 #define PWR_PVDLEVEL_5                      PWR_CR_PLS_LEV5
176 #define PWR_PVDLEVEL_6                      PWR_CR_PLS_LEV6
177 #define PWR_PVDLEVEL_7                      PWR_CR_PLS_LEV7
178 #define IS_PWR_PVD_LEVEL(LEVEL) (((LEVEL) == PWR_PVDLEVEL_0) || ((LEVEL) == PWR_PVDLEVEL_1)|| \
179                                  ((LEVEL) == PWR_PVDLEVEL_2) || ((LEVEL) == PWR_PVDLEVEL_3)|| \
180                                  ((LEVEL) == PWR_PVDLEVEL_4) || ((LEVEL) == PWR_PVDLEVEL_5)|| \
181                                  ((LEVEL) == PWR_PVDLEVEL_6) || ((LEVEL) == PWR_PVDLEVEL_7))
182 /**
183   * @}
184   */
185 
186 /** @defgroup PWREx_PVD_Mode PWREx PVD Mode
187   * @{
188   */
189 #define PWR_PVD_MODE_NORMAL                 (0x00000000U)   /*!< basic mode is used */
190 #define PWR_PVD_MODE_IT_RISING              (0x00010001U)   /*!< External Interrupt Mode with Rising edge trigger detection */
191 #define PWR_PVD_MODE_IT_FALLING             (0x00010002U)   /*!< External Interrupt Mode with Falling edge trigger detection */
192 #define PWR_PVD_MODE_IT_RISING_FALLING      (0x00010003U)   /*!< External Interrupt Mode with Rising/Falling edge trigger detection */
193 #define PWR_PVD_MODE_EVENT_RISING           (0x00020001U)   /*!< Event Mode with Rising edge trigger detection */
194 #define PWR_PVD_MODE_EVENT_FALLING          (0x00020002U)   /*!< Event Mode with Falling edge trigger detection */
195 #define PWR_PVD_MODE_EVENT_RISING_FALLING   (0x00020003U)   /*!< Event Mode with Rising/Falling edge trigger detection */
196 
197 #define IS_PWR_PVD_MODE(MODE) (((MODE) == PWR_PVD_MODE_IT_RISING)|| ((MODE) == PWR_PVD_MODE_IT_FALLING) || \
198                               ((MODE) == PWR_PVD_MODE_IT_RISING_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING) || \
199                               ((MODE) == PWR_PVD_MODE_EVENT_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING_FALLING) || \
200                               ((MODE) == PWR_PVD_MODE_NORMAL))
201 /**
202   * @}
203   */
204 #endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */
205        /* defined (STM32F071xB) || defined (STM32F072xB) || */
206        /* defined (STM32F091xC) */
207 
208 /** @defgroup PWREx_Flag PWREx Flag
209   * @{
210   */
211 #if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \
212     defined (STM32F071xB) || defined (STM32F072xB) || \
213     defined (STM32F091xC)
214 
215 #define PWR_FLAG_WU                         PWR_CSR_WUF
216 #define PWR_FLAG_SB                         PWR_CSR_SBF
217 #define PWR_FLAG_PVDO                       PWR_CSR_PVDO
218 #define PWR_FLAG_VREFINTRDY                 PWR_CSR_VREFINTRDYF
219 #elif defined (STM32F070x6) || defined (STM32F070xB) || defined (STM32F030xC)
220 #define PWR_FLAG_WU                         PWR_CSR_WUF
221 #define PWR_FLAG_SB                         PWR_CSR_SBF
222 #define PWR_FLAG_VREFINTRDY                 PWR_CSR_VREFINTRDYF
223 #else
224 #define PWR_FLAG_WU                         PWR_CSR_WUF
225 #define PWR_FLAG_SB                         PWR_CSR_SBF
226 
227 #endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */
228        /* defined (STM32F071xB) || defined (STM32F072xB) || */
229        /* defined (STM32F091xC) */
230 /**
231   * @}
232   */
233 
234 /**
235   * @}
236   */
237 
238 /* Exported macro ------------------------------------------------------------*/
239 /** @defgroup PWREx_Exported_Macros PWREx Exported Macros
240   * @{
241   */
242 #if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \
243     defined (STM32F071xB) || defined (STM32F072xB) || \
244     defined (STM32F091xC)
245 /**
246   * @brief Enable interrupt on PVD Exti Line 16.
247   * @retval None.
248   */
249 #define __HAL_PWR_PVD_EXTI_ENABLE_IT()      (EXTI->IMR |= (PWR_EXTI_LINE_PVD))
250 
251 /**
252   * @brief Disable interrupt on PVD Exti Line 16.
253   * @retval None.
254   */
255 #define __HAL_PWR_PVD_EXTI_DISABLE_IT()     (EXTI->IMR &= ~(PWR_EXTI_LINE_PVD))
256 
257 /**
258   * @brief Enable event on PVD Exti Line 16.
259   * @retval None.
260   */
261 #define __HAL_PWR_PVD_EXTI_ENABLE_EVENT()   (EXTI->EMR |= (PWR_EXTI_LINE_PVD))
262 
263 /**
264   * @brief Disable event on PVD Exti Line 16.
265   * @retval None.
266   */
267 #define __HAL_PWR_PVD_EXTI_DISABLE_EVENT()  (EXTI->EMR &= ~(PWR_EXTI_LINE_PVD))
268 
269 /**
270   * @brief Disable the PVD Extended Interrupt Rising Trigger.
271   * @retval None.
272   */
273 #define __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE()  CLEAR_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD)
274 
275 /**
276   * @brief Disable the PVD Extended Interrupt Falling Trigger.
277   * @retval None.
278   */
279 #define __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE()  CLEAR_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD)
280 
281 /**
282   * @brief Disable the PVD Extended Interrupt Rising & Falling Trigger.
283   * @retval None
284   */
285 #define __HAL_PWR_PVD_EXTI_DISABLE_RISING_FALLING_EDGE()  __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();__HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE();
286 
287 
288 /**
289   * @brief  PVD EXTI line configuration: set falling edge trigger.
290   * @retval None.
291   */
292 #define __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE()  EXTI->FTSR |= (PWR_EXTI_LINE_PVD)
293 
294 /**
295   * @brief  PVD EXTI line configuration: set rising edge trigger.
296   * @retval None.
297   */
298 #define __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE()   EXTI->RTSR |= (PWR_EXTI_LINE_PVD)
299 
300 /**
301   * @brief  Enable the PVD Extended Interrupt Rising & Falling Trigger.
302   * @retval None
303   */
304 #define __HAL_PWR_PVD_EXTI_ENABLE_RISING_FALLING_EDGE()   __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();__HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE();
305 
306 /**
307   * @brief Check whether the specified PVD EXTI interrupt flag is set or not.
308   * @retval EXTI PVD Line Status.
309   */
310 #define __HAL_PWR_PVD_EXTI_GET_FLAG()       (EXTI->PR & (PWR_EXTI_LINE_PVD))
311 
312 /**
313   * @brief Clear the PVD EXTI flag.
314   * @retval None.
315   */
316 #define __HAL_PWR_PVD_EXTI_CLEAR_FLAG()     (EXTI->PR = (PWR_EXTI_LINE_PVD))
317 
318 /**
319   * @brief Generate a Software interrupt on selected EXTI line.
320   * @retval None.
321   */
322 #define __HAL_PWR_PVD_EXTI_GENERATE_SWIT()  (EXTI->SWIER |= (PWR_EXTI_LINE_PVD))
323 
324 #endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */
325        /* defined (STM32F071xB) || defined (STM32F072xB) || */
326        /* defined (STM32F091xC) */
327 
328 
329 #if defined (STM32F042x6) || defined (STM32F048xx) || \
330     defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \
331     defined (STM32F091xC) || defined (STM32F098xx)
332 /**
333   * @brief Enable interrupt on Vddio2 Monitor Exti Line 31.
334   * @retval None.
335   */
336 #define __HAL_PWR_VDDIO2_EXTI_ENABLE_IT()             (EXTI->IMR |= (PWR_EXTI_LINE_VDDIO2))
337 
338 /**
339   * @brief Disable interrupt on Vddio2 Monitor Exti Line 31.
340   * @retval None.
341   */
342 #define __HAL_PWR_VDDIO2_EXTI_DISABLE_IT()            (EXTI->IMR &= ~(PWR_EXTI_LINE_VDDIO2))
343 
344 /**
345   * @brief  Vddio2 Monitor EXTI line configuration: clear falling edge and rising edge trigger.
346   * @retval None.
347   */
348 #define __HAL_PWR_VDDIO2_EXTI_DISABLE_FALLING_EDGE()                 \
349                         do{                                          \
350                             EXTI->FTSR &= ~(PWR_EXTI_LINE_VDDIO2);   \
351                             EXTI->RTSR &= ~(PWR_EXTI_LINE_VDDIO2);   \
352                           } while(0)
353 
354 /**
355   * @brief  Vddio2 Monitor EXTI line configuration: set falling edge trigger.
356   * @retval None.
357   */
358 #define __HAL_PWR_VDDIO2_EXTI_ENABLE_FALLING_EDGE()  EXTI->FTSR |= (PWR_EXTI_LINE_VDDIO2)
359 
360 /**
361   * @brief Check whether the specified VDDIO2 monitor EXTI interrupt flag is set or not.
362   * @retval EXTI VDDIO2 Monitor Line Status.
363   */
364 #define __HAL_PWR_VDDIO2_EXTI_GET_FLAG()              (EXTI->PR & (PWR_EXTI_LINE_VDDIO2))
365 
366 /**
367   * @brief Clear the VDDIO2 Monitor EXTI flag.
368   * @retval None.
369   */
370 #define __HAL_PWR_VDDIO2_EXTI_CLEAR_FLAG()            (EXTI->PR = (PWR_EXTI_LINE_VDDIO2))
371 
372 /**
373   * @brief Generate a Software interrupt on selected EXTI line.
374   * @retval None.
375   */
376 #define __HAL_PWR_VDDIO2_EXTI_GENERATE_SWIT()         (EXTI->SWIER |= (PWR_EXTI_LINE_VDDIO2))
377 
378 
379 #endif /* defined (STM32F042x6) || defined (STM32F048xx) ||\
380           defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \
381           defined (STM32F091xC) || defined (STM32F098xx) */
382 
383 /**
384   * @}
385   */
386 
387 /* Exported functions --------------------------------------------------------*/
388 
389 /** @addtogroup PWREx_Exported_Functions PWREx Exported Functions
390  *  @{
391  */
392 
393 /** @addtogroup PWREx_Exported_Functions_Group1
394   * @{
395   */
396 /* I/O operation functions  ***************************************************/
397 #if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \
398     defined (STM32F071xB) || defined (STM32F072xB) || \
399     defined (STM32F091xC)
400 void HAL_PWR_PVD_IRQHandler(void);
401 void HAL_PWR_PVDCallback(void);
402 #endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */
403        /* defined (STM32F071xB) || defined (STM32F072xB) || */
404        /* defined (STM32F091xC) */
405 
406 #if defined (STM32F042x6) || defined (STM32F048xx) || \
407     defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \
408     defined (STM32F091xC) || defined (STM32F098xx)
409 void HAL_PWREx_Vddio2Monitor_IRQHandler(void);
410 void HAL_PWREx_Vddio2MonitorCallback(void);
411 #endif /* defined (STM32F042x6) || defined (STM32F048xx) || \
412           defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \
413           defined (STM32F091xC) || defined (STM32F098xx) */
414 
415 /* Peripheral Control functions  **********************************************/
416 #if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \
417     defined (STM32F071xB) || defined (STM32F072xB) || \
418     defined (STM32F091xC)
419 void HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD);
420 void HAL_PWR_EnablePVD(void);
421 void HAL_PWR_DisablePVD(void);
422 #endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */
423        /* defined (STM32F071xB) || defined (STM32F072xB) || */
424        /* defined (STM32F091xC) */
425 
426 #if defined (STM32F042x6) || defined (STM32F048xx) || \
427     defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \
428     defined (STM32F091xC) || defined (STM32F098xx)
429 void HAL_PWREx_EnableVddio2Monitor(void);
430 void HAL_PWREx_DisableVddio2Monitor(void);
431 #endif /* defined (STM32F042x6) || defined (STM32F048xx) || \
432           defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \
433           defined (STM32F091xC) || defined (STM32F098xx) */
434 
435 /**
436   * @}
437   */
438 
439 /**
440   * @}
441   */
442 
443 /**
444   * @}
445   */
446 
447 /**
448   * @}
449   */
450 
451 #ifdef __cplusplus
452 }
453 #endif
454 
455 #endif /* __STM32F0xx_HAL_PWR_EX_H */
456