1 /**
2 ******************************************************************************
3 * @file stm32l1xx_hal_pwr_ex.c
4 * @author MCD Application Team
5 * @brief Extended PWR HAL module driver.
6 * This file provides firmware functions to manage the following
7 * functionalities of the Power Controller (PWR) peripheral:
8 * + Extended Initialization and de-initialization functions
9 * + Extended Peripheral Control functions
10 *
11 ******************************************************************************
12 * @attention
13 *
14 * Copyright (c) 2017 STMicroelectronics.
15 * All rights reserved.
16 *
17 * This software is licensed under terms that can be found in the LICENSE file
18 * in the root directory of this software component.
19 * If no LICENSE file comes with this software, it is provided AS-IS.
20 *
21 ******************************************************************************
22 */
23
24 /* Includes ------------------------------------------------------------------*/
25 #include "stm32l1xx_hal.h"
26
27 /** @addtogroup STM32L1xx_HAL_Driver
28 * @{
29 */
30
31 /** @defgroup PWREx PWREx
32 * @brief PWR HAL module driver
33 * @{
34 */
35
36 #ifdef HAL_PWR_MODULE_ENABLED
37
38 /* Private typedef -----------------------------------------------------------*/
39 /* Private define ------------------------------------------------------------*/
40 /* Private macro -------------------------------------------------------------*/
41 /* Private variables ---------------------------------------------------------*/
42 /* Private function prototypes -----------------------------------------------*/
43 /* Private functions ---------------------------------------------------------*/
44
45 /** @defgroup PWREx_Exported_Functions PWREx Exported Functions
46 * @{
47 */
48
49 /** @defgroup PWREx_Exported_Functions_Group1 Peripheral Extended Features Functions
50 * @brief Low Power modes configuration functions
51 *
52 @verbatim
53
54 ===============================================================================
55 ##### Peripheral extended features functions #####
56 ===============================================================================
57 @endverbatim
58 * @{
59 */
60
61 /**
62 * @brief Return Voltage Scaling Range.
63 * @retval VOS bit field (PWR_REGULATOR_VOLTAGE_SCALE1, PWR_REGULATOR_VOLTAGE_SCALE2 or PWR_REGULATOR_VOLTAGE_SCALE3)
64 */
HAL_PWREx_GetVoltageRange(void)65 uint32_t HAL_PWREx_GetVoltageRange(void)
66 {
67 return (PWR->CR & PWR_CR_VOS);
68 }
69
70
71 /**
72 * @brief Enables the Fast WakeUp from Ultra Low Power mode.
73 * @note This bit works in conjunction with ULP bit.
74 * Means, when ULP = 1 and FWU = 1 :VREFINT startup time is ignored when
75 * exiting from low power mode.
76 * @retval None
77 */
HAL_PWREx_EnableFastWakeUp(void)78 void HAL_PWREx_EnableFastWakeUp(void)
79 {
80 /* Enable the fast wake up */
81 *(__IO uint32_t *) CR_FWU_BB = (uint32_t)ENABLE;
82 }
83
84 /**
85 * @brief Disables the Fast WakeUp from Ultra Low Power mode.
86 * @retval None
87 */
HAL_PWREx_DisableFastWakeUp(void)88 void HAL_PWREx_DisableFastWakeUp(void)
89 {
90 /* Disable the fast wake up */
91 *(__IO uint32_t *) CR_FWU_BB = (uint32_t)DISABLE;
92 }
93
94 /**
95 * @brief Enables the Ultra Low Power mode
96 * @retval None
97 */
HAL_PWREx_EnableUltraLowPower(void)98 void HAL_PWREx_EnableUltraLowPower(void)
99 {
100 /* Enable the Ultra Low Power mode */
101 *(__IO uint32_t *) CR_ULP_BB = (uint32_t)ENABLE;
102 }
103
104 /**
105 * @brief Disables the Ultra Low Power mode
106 * @retval None
107 */
HAL_PWREx_DisableUltraLowPower(void)108 void HAL_PWREx_DisableUltraLowPower(void)
109 {
110 /* Disable the Ultra Low Power mode */
111 *(__IO uint32_t *) CR_ULP_BB = (uint32_t)DISABLE;
112 }
113
114 /**
115 * @brief Enters the Low Power Run mode.
116 * @note Low power run mode can only be entered when VCORE is in range 2.
117 * In addition, the dynamic voltage scaling must not be used when Low
118 * power run mode is selected. Only Stop and Sleep modes with regulator
119 * configured in Low power mode is allowed when Low power run mode is
120 * selected.
121 * @note In Low power run mode, all I/O pins keep the same state as in Run mode.
122 * @retval None
123 */
HAL_PWREx_EnableLowPowerRunMode(void)124 void HAL_PWREx_EnableLowPowerRunMode(void)
125 {
126 /* Enters the Low Power Run mode */
127 *(__IO uint32_t *) CR_LPSDSR_BB = (uint32_t)ENABLE;
128 *(__IO uint32_t *) CR_LPRUN_BB = (uint32_t)ENABLE;
129 }
130
131 /**
132 * @brief Exits the Low Power Run mode.
133 * @retval None
134 */
HAL_PWREx_DisableLowPowerRunMode(void)135 HAL_StatusTypeDef HAL_PWREx_DisableLowPowerRunMode(void)
136 {
137 /* Exits the Low Power Run mode */
138 *(__IO uint32_t *) CR_LPRUN_BB = (uint32_t)DISABLE;
139 *(__IO uint32_t *) CR_LPSDSR_BB = (uint32_t)DISABLE;
140 return HAL_OK;
141 }
142
143 /**
144 * @}
145 */
146
147 /**
148 * @}
149 */
150
151 #endif /* HAL_PWR_MODULE_ENABLED */
152 /**
153 * @}
154 */
155
156 /**
157 * @}
158 */
159