1 /**
2   ******************************************************************************
3   * @file    stm32f2xx_ll_pwr.h
4   * @author  MCD Application Team
5   * @brief   Header file of PWR LL module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2017 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 __STM32F2xx_LL_PWR_H
21 #define __STM32F2xx_LL_PWR_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32f2xx.h"
29 
30 /** @addtogroup STM32F2xx_LL_Driver
31   * @{
32   */
33 
34 #if defined(PWR)
35 
36 /** @defgroup PWR_LL PWR
37   * @{
38   */
39 
40 /* Private types -------------------------------------------------------------*/
41 /* Private variables ---------------------------------------------------------*/
42 /* Private constants ---------------------------------------------------------*/
43 /* Private macros ------------------------------------------------------------*/
44 /* Exported types ------------------------------------------------------------*/
45 /* Exported constants --------------------------------------------------------*/
46 /** @defgroup PWR_LL_Exported_Constants PWR Exported Constants
47   * @{
48   */
49 
50 /** @defgroup PWR_LL_EC_CLEAR_FLAG Clear Flags Defines
51   * @brief    Flags defines which can be used with LL_PWR_WriteReg function
52   * @{
53   */
54 #define LL_PWR_CR_CSBF                     PWR_CR_CSBF            /*!< Clear standby flag */
55 #define LL_PWR_CR_CWUF                     PWR_CR_CWUF            /*!< Clear wakeup flag */
56 /**
57   * @}
58   */
59 
60 /** @defgroup PWR_LL_EC_GET_FLAG Get Flags Defines
61   * @brief    Flags defines which can be used with LL_PWR_ReadReg function
62   * @{
63   */
64 #define LL_PWR_CSR_WUF                     PWR_CSR_WUF            /*!< Wakeup flag */
65 #define LL_PWR_CSR_SBF                     PWR_CSR_SBF            /*!< Standby flag */
66 #define LL_PWR_CSR_PVDO                    PWR_CSR_PVDO           /*!< Power voltage detector output flag */
67 #define LL_PWR_CSR_EWUP1                   PWR_CSR_EWUP           /*!< Enable WKUP pin 1 */
68 /**
69   * @}
70   */
71 
72 
73 /** @defgroup PWR_LL_EC_MODE_PWR Mode Power
74   * @{
75   */
76 #define LL_PWR_MODE_STOP_MAINREGU             0x00000000U                    /*!< Enter Stop mode when the CPU enters deepsleep */
77 #define LL_PWR_MODE_STOP_LPREGU               (PWR_CR_LPDS)                  /*!< Enter Stop mode (with low power regulator ON) when the CPU enters deepsleep */
78 #define LL_PWR_MODE_STANDBY                   (PWR_CR_PDDS)                  /*!< Enter Standby mode when the CPU enters deepsleep */
79 /**
80   * @}
81   */
82 
83 /** @defgroup PWR_LL_EC_REGU_MODE_DS_MODE  Regulator Mode In Deep Sleep Mode
84  * @{
85  */
86 #define LL_PWR_REGU_DSMODE_MAIN        0x00000000U           /*!< Voltage regulator in main mode during deepsleep mode */
87 #define LL_PWR_REGU_DSMODE_LOW_POWER   (PWR_CR_LPDS)         /*!< Voltage regulator in low-power mode during deepsleep mode */
88 /**
89   * @}
90   */
91 
92 /** @defgroup PWR_LL_EC_PVDLEVEL Power Voltage Detector Level
93   * @{
94   */
95 #define LL_PWR_PVDLEVEL_0                  (PWR_CR_PLS_LEV0)      /*!< Voltage threshold detected by PVD 2.2 V */
96 #define LL_PWR_PVDLEVEL_1                  (PWR_CR_PLS_LEV1)      /*!< Voltage threshold detected by PVD 2.3 V */
97 #define LL_PWR_PVDLEVEL_2                  (PWR_CR_PLS_LEV2)      /*!< Voltage threshold detected by PVD 2.4 V */
98 #define LL_PWR_PVDLEVEL_3                  (PWR_CR_PLS_LEV3)      /*!< Voltage threshold detected by PVD 2.5 V */
99 #define LL_PWR_PVDLEVEL_4                  (PWR_CR_PLS_LEV4)      /*!< Voltage threshold detected by PVD 2.6 V */
100 #define LL_PWR_PVDLEVEL_5                  (PWR_CR_PLS_LEV5)      /*!< Voltage threshold detected by PVD 2.7 V */
101 #define LL_PWR_PVDLEVEL_6                  (PWR_CR_PLS_LEV6)      /*!< Voltage threshold detected by PVD 2.8 V */
102 #define LL_PWR_PVDLEVEL_7                  (PWR_CR_PLS_LEV7)      /*!< Voltage threshold detected by PVD 2.9 V */
103 /**
104   * @}
105   */
106 /** @defgroup PWR_LL_EC_WAKEUP_PIN  Wakeup Pins
107   * @{
108   */
109 #define LL_PWR_WAKEUP_PIN1                 (PWR_CSR_EWUP)        /*!< WKUP pin 1 : PA0 */
110 /**
111   * @}
112   */
113 
114 /**
115   * @}
116   */
117 
118 
119 /* Exported macro ------------------------------------------------------------*/
120 /** @defgroup PWR_LL_Exported_Macros PWR Exported Macros
121   * @{
122   */
123 
124 /** @defgroup PWR_LL_EM_WRITE_READ Common write and read registers Macros
125   * @{
126   */
127 
128 /**
129   * @brief  Write a value in PWR register
130   * @param  __REG__ Register to be written
131   * @param  __VALUE__ Value to be written in the register
132   * @retval None
133   */
134 #define LL_PWR_WriteReg(__REG__, __VALUE__) WRITE_REG(PWR->__REG__, (__VALUE__))
135 
136 /**
137   * @brief  Read a value in PWR register
138   * @param  __REG__ Register to be read
139   * @retval Register value
140   */
141 #define LL_PWR_ReadReg(__REG__) READ_REG(PWR->__REG__)
142 /**
143   * @}
144   */
145 
146 /**
147   * @}
148   */
149 
150 /* Exported functions --------------------------------------------------------*/
151 /** @defgroup PWR_LL_Exported_Functions PWR Exported Functions
152   * @{
153   */
154 
155 /** @defgroup PWR_LL_EF_Configuration Configuration
156   * @{
157   */
158 /**
159   * @brief  Enable the Flash Power Down in Stop Mode
160   * @rmtoll CR    FPDS       LL_PWR_EnableFlashPowerDown
161   * @retval None
162   */
LL_PWR_EnableFlashPowerDown(void)163 __STATIC_INLINE void LL_PWR_EnableFlashPowerDown(void)
164 {
165   SET_BIT(PWR->CR, PWR_CR_FPDS);
166 }
167 
168 /**
169   * @brief  Disable the Flash Power Down in Stop Mode
170   * @rmtoll CR    FPDS       LL_PWR_DisableFlashPowerDown
171   * @retval None
172   */
LL_PWR_DisableFlashPowerDown(void)173 __STATIC_INLINE void LL_PWR_DisableFlashPowerDown(void)
174 {
175   CLEAR_BIT(PWR->CR, PWR_CR_FPDS);
176 }
177 
178 /**
179   * @brief  Check if the Flash Power Down in Stop Mode is enabled
180   * @rmtoll CR    FPDS       LL_PWR_IsEnabledFlashPowerDown
181   * @retval State of bit (1 or 0).
182   */
LL_PWR_IsEnabledFlashPowerDown(void)183 __STATIC_INLINE uint32_t LL_PWR_IsEnabledFlashPowerDown(void)
184 {
185   return (READ_BIT(PWR->CR, PWR_CR_FPDS) == (PWR_CR_FPDS));
186 }
187 
188 /**
189   * @brief  Enable access to the backup domain
190   * @rmtoll CR    DBP       LL_PWR_EnableBkUpAccess
191   * @retval None
192   */
LL_PWR_EnableBkUpAccess(void)193 __STATIC_INLINE void LL_PWR_EnableBkUpAccess(void)
194 {
195   SET_BIT(PWR->CR, PWR_CR_DBP);
196 }
197 
198 /**
199   * @brief  Disable access to the backup domain
200   * @rmtoll CR    DBP       LL_PWR_DisableBkUpAccess
201   * @retval None
202   */
LL_PWR_DisableBkUpAccess(void)203 __STATIC_INLINE void LL_PWR_DisableBkUpAccess(void)
204 {
205   CLEAR_BIT(PWR->CR, PWR_CR_DBP);
206 }
207 
208 /**
209   * @brief  Check if the backup domain is enabled
210   * @rmtoll CR    DBP       LL_PWR_IsEnabledBkUpAccess
211   * @retval State of bit (1 or 0).
212   */
LL_PWR_IsEnabledBkUpAccess(void)213 __STATIC_INLINE uint32_t LL_PWR_IsEnabledBkUpAccess(void)
214 {
215   return (READ_BIT(PWR->CR, PWR_CR_DBP) == (PWR_CR_DBP));
216 }
217 /**
218   * @brief  Enable the backup regulator
219   * @rmtoll CSR    BRE       LL_PWR_EnableBkUpRegulator
220   * @note The BRE bit of the PWR_CSR register is protected against parasitic write access.
221   * The LL_PWR_EnableBkUpAccess() must be called before using this API.
222   * @retval None
223   */
LL_PWR_EnableBkUpRegulator(void)224 __STATIC_INLINE void LL_PWR_EnableBkUpRegulator(void)
225 {
226   SET_BIT(PWR->CSR, PWR_CSR_BRE);
227 }
228 
229 /**
230   * @brief  Disable the backup Regulator
231   * @rmtoll CSR    BRE       LL_PWR_DisableBkUpRegulator
232   * @note The BRE bit of the PWR_CSR register is protected against parasitic write access.
233   * The LL_PWR_EnableBkUpAccess() must be called before using this API.
234   * @retval None
235   */
LL_PWR_DisableBkUpRegulator(void)236 __STATIC_INLINE void LL_PWR_DisableBkUpRegulator(void)
237 {
238   CLEAR_BIT(PWR->CSR, PWR_CSR_BRE);
239 }
240 
241 /**
242   * @brief  Check if the backup Regulator is enabled
243   * @rmtoll CSR    BRE       LL_PWR_IsEnabledBkUpRegulator
244   * @retval State of bit (1 or 0).
245   */
LL_PWR_IsEnabledBkUpRegulator(void)246 __STATIC_INLINE uint32_t LL_PWR_IsEnabledBkUpRegulator(void)
247 {
248   return (READ_BIT(PWR->CSR, PWR_CSR_BRE) == (PWR_CSR_BRE));
249 }
250 
251 /**
252   * @brief  Set voltage regulator mode during deep sleep mode
253   * @rmtoll CR    LPDS         LL_PWR_SetRegulModeDS
254   * @param  RegulMode This parameter can be one of the following values:
255   *         @arg @ref LL_PWR_REGU_DSMODE_MAIN
256   *         @arg @ref LL_PWR_REGU_DSMODE_LOW_POWER
257   * @retval None
258   */
LL_PWR_SetRegulModeDS(uint32_t RegulMode)259 __STATIC_INLINE void LL_PWR_SetRegulModeDS(uint32_t RegulMode)
260 {
261   MODIFY_REG(PWR->CR, PWR_CR_LPDS, RegulMode);
262 }
263 
264 /**
265   * @brief  Get voltage regulator mode during deep sleep mode
266   * @rmtoll CR    LPDS         LL_PWR_GetRegulModeDS
267   * @retval Returned value can be one of the following values:
268   *         @arg @ref LL_PWR_REGU_DSMODE_MAIN
269   *         @arg @ref LL_PWR_REGU_DSMODE_LOW_POWER
270   */
LL_PWR_GetRegulModeDS(void)271 __STATIC_INLINE uint32_t LL_PWR_GetRegulModeDS(void)
272 {
273   return (uint32_t)(READ_BIT(PWR->CR, PWR_CR_LPDS));
274 }
275 
276 /**
277   * @brief  Set power down mode when CPU enters deepsleep
278   * @rmtoll CR    PDDS         LL_PWR_SetPowerMode\n
279   * @rmtoll CR    LPDS         LL_PWR_SetPowerMode
280   * @param  PDMode This parameter can be one of the following values:
281   *         @arg @ref LL_PWR_MODE_STOP_MAINREGU
282   *         @arg @ref LL_PWR_MODE_STOP_LPREGU
283   *         @arg @ref LL_PWR_MODE_STANDBY
284   * @retval None
285   */
LL_PWR_SetPowerMode(uint32_t PDMode)286 __STATIC_INLINE void LL_PWR_SetPowerMode(uint32_t PDMode)
287 {
288   MODIFY_REG(PWR->CR, (PWR_CR_PDDS| PWR_CR_LPDS), PDMode);
289 }
290 
291 /**
292   * @brief  Get power down mode when CPU enters deepsleep
293   * @rmtoll CR    PDDS         LL_PWR_GetPowerMode\n
294   * @rmtoll CR    LPDS         LL_PWR_GetPowerMode
295   * @retval Returned value can be one of the following values:
296   *         @arg @ref LL_PWR_MODE_STOP_MAINREGU
297   *         @arg @ref LL_PWR_MODE_STOP_LPREGU
298   *         @arg @ref LL_PWR_MODE_STANDBY
299   */
LL_PWR_GetPowerMode(void)300 __STATIC_INLINE uint32_t LL_PWR_GetPowerMode(void)
301 {
302   return (uint32_t)(READ_BIT(PWR->CR, (PWR_CR_PDDS| PWR_CR_LPDS)));
303 }
304 
305 /**
306   * @brief  Configure the voltage threshold detected by the Power Voltage Detector
307   * @rmtoll CR    PLS       LL_PWR_SetPVDLevel
308   * @param  PVDLevel This parameter can be one of the following values:
309   *         @arg @ref LL_PWR_PVDLEVEL_0
310   *         @arg @ref LL_PWR_PVDLEVEL_1
311   *         @arg @ref LL_PWR_PVDLEVEL_2
312   *         @arg @ref LL_PWR_PVDLEVEL_3
313   *         @arg @ref LL_PWR_PVDLEVEL_4
314   *         @arg @ref LL_PWR_PVDLEVEL_5
315   *         @arg @ref LL_PWR_PVDLEVEL_6
316   *         @arg @ref LL_PWR_PVDLEVEL_7
317   * @retval None
318   */
LL_PWR_SetPVDLevel(uint32_t PVDLevel)319 __STATIC_INLINE void LL_PWR_SetPVDLevel(uint32_t PVDLevel)
320 {
321   MODIFY_REG(PWR->CR, PWR_CR_PLS, PVDLevel);
322 }
323 
324 /**
325   * @brief  Get the voltage threshold detection
326   * @rmtoll CR    PLS       LL_PWR_GetPVDLevel
327   * @retval Returned value can be one of the following values:
328   *         @arg @ref LL_PWR_PVDLEVEL_0
329   *         @arg @ref LL_PWR_PVDLEVEL_1
330   *         @arg @ref LL_PWR_PVDLEVEL_2
331   *         @arg @ref LL_PWR_PVDLEVEL_3
332   *         @arg @ref LL_PWR_PVDLEVEL_4
333   *         @arg @ref LL_PWR_PVDLEVEL_5
334   *         @arg @ref LL_PWR_PVDLEVEL_6
335   *         @arg @ref LL_PWR_PVDLEVEL_7
336   */
LL_PWR_GetPVDLevel(void)337 __STATIC_INLINE uint32_t LL_PWR_GetPVDLevel(void)
338 {
339   return (uint32_t)(READ_BIT(PWR->CR, PWR_CR_PLS));
340 }
341 
342 /**
343   * @brief  Enable Power Voltage Detector
344   * @rmtoll CR    PVDE       LL_PWR_EnablePVD
345   * @retval None
346   */
LL_PWR_EnablePVD(void)347 __STATIC_INLINE void LL_PWR_EnablePVD(void)
348 {
349   SET_BIT(PWR->CR, PWR_CR_PVDE);
350 }
351 
352 /**
353   * @brief  Disable Power Voltage Detector
354   * @rmtoll CR    PVDE       LL_PWR_DisablePVD
355   * @retval None
356   */
LL_PWR_DisablePVD(void)357 __STATIC_INLINE void LL_PWR_DisablePVD(void)
358 {
359   CLEAR_BIT(PWR->CR, PWR_CR_PVDE);
360 }
361 
362 /**
363   * @brief  Check if Power Voltage Detector is enabled
364   * @rmtoll CR    PVDE       LL_PWR_IsEnabledPVD
365   * @retval State of bit (1 or 0).
366   */
LL_PWR_IsEnabledPVD(void)367 __STATIC_INLINE uint32_t LL_PWR_IsEnabledPVD(void)
368 {
369   return (READ_BIT(PWR->CR, PWR_CR_PVDE) == (PWR_CR_PVDE));
370 }
371 
372 /**
373   * @brief  Enable the WakeUp PINx functionality
374   * @rmtoll CSR   EWUP       LL_PWR_EnableWakeUpPin
375   * @param  WakeUpPin This parameter can be one of the following values:
376   *         @arg @ref LL_PWR_WAKEUP_PIN1
377   * @retval None
378   */
LL_PWR_EnableWakeUpPin(uint32_t WakeUpPin)379 __STATIC_INLINE void LL_PWR_EnableWakeUpPin(uint32_t WakeUpPin)
380 {
381   SET_BIT(PWR->CSR, WakeUpPin);
382 }
383 
384 /**
385   * @brief  Disable the WakeUp PINx functionality
386   * @rmtoll CSR   EWUP       LL_PWR_DisableWakeUpPin
387   * @param  WakeUpPin This parameter can be one of the following values:
388   *         @arg @ref LL_PWR_WAKEUP_PIN1
389   * @retval None
390   */
LL_PWR_DisableWakeUpPin(uint32_t WakeUpPin)391 __STATIC_INLINE void LL_PWR_DisableWakeUpPin(uint32_t WakeUpPin)
392 {
393   CLEAR_BIT(PWR->CSR, WakeUpPin);
394 }
395 
396 /**
397   * @brief  Check if the WakeUp PINx functionality is enabled
398   * @rmtoll CSR   EWUP       LL_PWR_IsEnabledWakeUpPin
399   * @param  WakeUpPin This parameter can be one of the following values:
400   *         @arg @ref LL_PWR_WAKEUP_PIN1
401   * @retval State of bit (1 or 0).
402   */
LL_PWR_IsEnabledWakeUpPin(uint32_t WakeUpPin)403 __STATIC_INLINE uint32_t LL_PWR_IsEnabledWakeUpPin(uint32_t WakeUpPin)
404 {
405   return (READ_BIT(PWR->CSR, WakeUpPin) == (WakeUpPin));
406 }
407 
408 
409 /**
410   * @}
411   */
412 
413 /** @defgroup PWR_LL_EF_FLAG_Management FLAG_Management
414   * @{
415   */
416 
417 /**
418   * @brief  Get Wake-up Flag
419   * @rmtoll CSR   WUF       LL_PWR_IsActiveFlag_WU
420   * @retval State of bit (1 or 0).
421   */
LL_PWR_IsActiveFlag_WU(void)422 __STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_WU(void)
423 {
424   return (READ_BIT(PWR->CSR, PWR_CSR_WUF) == (PWR_CSR_WUF));
425 }
426 
427 /**
428   * @brief  Get Standby Flag
429   * @rmtoll CSR   SBF       LL_PWR_IsActiveFlag_SB
430   * @retval State of bit (1 or 0).
431   */
LL_PWR_IsActiveFlag_SB(void)432 __STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_SB(void)
433 {
434   return (READ_BIT(PWR->CSR, PWR_CSR_SBF) == (PWR_CSR_SBF));
435 }
436 
437 /**
438   * @brief  Get Backup regulator ready Flag
439   * @rmtoll CSR   BRR       LL_PWR_IsActiveFlag_BRR
440   * @retval State of bit (1 or 0).
441   */
LL_PWR_IsActiveFlag_BRR(void)442 __STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_BRR(void)
443 {
444   return (READ_BIT(PWR->CSR, PWR_CSR_BRR) == (PWR_CSR_BRR));
445 }
446 /**
447   * @brief  Indicate whether VDD voltage is below the selected PVD threshold
448   * @rmtoll CSR   PVDO       LL_PWR_IsActiveFlag_PVDO
449   * @retval State of bit (1 or 0).
450   */
LL_PWR_IsActiveFlag_PVDO(void)451 __STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_PVDO(void)
452 {
453   return (READ_BIT(PWR->CSR, PWR_CSR_PVDO) == (PWR_CSR_PVDO));
454 }
455 
456 /**
457   * @brief  Clear Standby Flag
458   * @rmtoll CR   CSBF       LL_PWR_ClearFlag_SB
459   * @retval None
460   */
LL_PWR_ClearFlag_SB(void)461 __STATIC_INLINE void LL_PWR_ClearFlag_SB(void)
462 {
463   SET_BIT(PWR->CR, PWR_CR_CSBF);
464 }
465 
466 /**
467   * @brief  Clear Wake-up Flags
468   * @rmtoll CR   CWUF       LL_PWR_ClearFlag_WU
469   * @retval None
470   */
LL_PWR_ClearFlag_WU(void)471 __STATIC_INLINE void LL_PWR_ClearFlag_WU(void)
472 {
473   SET_BIT(PWR->CR, PWR_CR_CWUF);
474 }
475 #if defined(USE_FULL_LL_DRIVER)
476 /** @defgroup PWR_LL_EF_Init De-initialization function
477   * @{
478   */
479 ErrorStatus LL_PWR_DeInit(void);
480 /**
481   * @}
482   */
483 #endif /* USE_FULL_LL_DRIVER */
484 
485 /**
486   * @}
487   */
488 
489 /**
490   * @}
491   */
492 
493 /**
494   * @}
495   */
496 
497 #endif /* defined(PWR) */
498 
499 /**
500   * @}
501   */
502 
503 #ifdef __cplusplus
504 }
505 #endif
506 
507 #endif /* __STM32F2xx_LL_PWR_H */
508