1 /**
2 ******************************************************************************
3 * @file stm32f1xx_ll_pwr.h
4 * @author MCD Application Team
5 * @brief Header file of PWR LL 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 __STM32F1xx_LL_PWR_H
21 #define __STM32F1xx_LL_PWR_H
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32f1xx.h"
29
30 /** @addtogroup STM32F1xx_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 /**
160 * @brief Enable access to the backup domain
161 * @rmtoll CR DBP LL_PWR_EnableBkUpAccess
162 * @retval None
163 */
LL_PWR_EnableBkUpAccess(void)164 __STATIC_INLINE void LL_PWR_EnableBkUpAccess(void)
165 {
166 SET_BIT(PWR->CR, PWR_CR_DBP);
167 }
168
169 /**
170 * @brief Disable access to the backup domain
171 * @rmtoll CR DBP LL_PWR_DisableBkUpAccess
172 * @retval None
173 */
LL_PWR_DisableBkUpAccess(void)174 __STATIC_INLINE void LL_PWR_DisableBkUpAccess(void)
175 {
176 CLEAR_BIT(PWR->CR, PWR_CR_DBP);
177 }
178
179 /**
180 * @brief Check if the backup domain is enabled
181 * @rmtoll CR DBP LL_PWR_IsEnabledBkUpAccess
182 * @retval State of bit (1 or 0).
183 */
LL_PWR_IsEnabledBkUpAccess(void)184 __STATIC_INLINE uint32_t LL_PWR_IsEnabledBkUpAccess(void)
185 {
186 return (READ_BIT(PWR->CR, PWR_CR_DBP) == (PWR_CR_DBP));
187 }
188
189 /**
190 * @brief Set voltage Regulator mode during deep sleep mode
191 * @rmtoll CR LPDS LL_PWR_SetRegulModeDS
192 * @param RegulMode This parameter can be one of the following values:
193 * @arg @ref LL_PWR_REGU_DSMODE_MAIN
194 * @arg @ref LL_PWR_REGU_DSMODE_LOW_POWER
195 * @retval None
196 */
LL_PWR_SetRegulModeDS(uint32_t RegulMode)197 __STATIC_INLINE void LL_PWR_SetRegulModeDS(uint32_t RegulMode)
198 {
199 MODIFY_REG(PWR->CR, PWR_CR_LPDS, RegulMode);
200 }
201
202 /**
203 * @brief Get voltage Regulator mode during deep sleep mode
204 * @rmtoll CR LPDS LL_PWR_GetRegulModeDS
205 * @retval Returned value can be one of the following values:
206 * @arg @ref LL_PWR_REGU_DSMODE_MAIN
207 * @arg @ref LL_PWR_REGU_DSMODE_LOW_POWER
208 */
LL_PWR_GetRegulModeDS(void)209 __STATIC_INLINE uint32_t LL_PWR_GetRegulModeDS(void)
210 {
211 return (uint32_t)(READ_BIT(PWR->CR, PWR_CR_LPDS));
212 }
213
214 /**
215 * @brief Set Power Down mode when CPU enters deepsleep
216 * @rmtoll CR PDDS LL_PWR_SetPowerMode\n
217 * @rmtoll CR LPDS LL_PWR_SetPowerMode
218 * @param PDMode This parameter can be one of the following values:
219 * @arg @ref LL_PWR_MODE_STOP_MAINREGU
220 * @arg @ref LL_PWR_MODE_STOP_LPREGU
221 * @arg @ref LL_PWR_MODE_STANDBY
222 * @retval None
223 */
LL_PWR_SetPowerMode(uint32_t PDMode)224 __STATIC_INLINE void LL_PWR_SetPowerMode(uint32_t PDMode)
225 {
226 MODIFY_REG(PWR->CR, (PWR_CR_PDDS| PWR_CR_LPDS), PDMode);
227 }
228
229 /**
230 * @brief Get Power Down mode when CPU enters deepsleep
231 * @rmtoll CR PDDS LL_PWR_GetPowerMode\n
232 * @rmtoll CR LPDS LL_PWR_GetPowerMode
233 * @retval Returned value can be one of the following values:
234 * @arg @ref LL_PWR_MODE_STOP_MAINREGU
235 * @arg @ref LL_PWR_MODE_STOP_LPREGU
236 * @arg @ref LL_PWR_MODE_STANDBY
237 */
LL_PWR_GetPowerMode(void)238 __STATIC_INLINE uint32_t LL_PWR_GetPowerMode(void)
239 {
240 return (uint32_t)(READ_BIT(PWR->CR, (PWR_CR_PDDS| PWR_CR_LPDS)));
241 }
242
243 /**
244 * @brief Configure the voltage threshold detected by the Power Voltage Detector
245 * @rmtoll CR PLS LL_PWR_SetPVDLevel
246 * @param PVDLevel This parameter can be one of the following values:
247 * @arg @ref LL_PWR_PVDLEVEL_0
248 * @arg @ref LL_PWR_PVDLEVEL_1
249 * @arg @ref LL_PWR_PVDLEVEL_2
250 * @arg @ref LL_PWR_PVDLEVEL_3
251 * @arg @ref LL_PWR_PVDLEVEL_4
252 * @arg @ref LL_PWR_PVDLEVEL_5
253 * @arg @ref LL_PWR_PVDLEVEL_6
254 * @arg @ref LL_PWR_PVDLEVEL_7
255 * @retval None
256 */
LL_PWR_SetPVDLevel(uint32_t PVDLevel)257 __STATIC_INLINE void LL_PWR_SetPVDLevel(uint32_t PVDLevel)
258 {
259 MODIFY_REG(PWR->CR, PWR_CR_PLS, PVDLevel);
260 }
261
262 /**
263 * @brief Get the voltage threshold detection
264 * @rmtoll CR PLS LL_PWR_GetPVDLevel
265 * @retval Returned value can be one of the following values:
266 * @arg @ref LL_PWR_PVDLEVEL_0
267 * @arg @ref LL_PWR_PVDLEVEL_1
268 * @arg @ref LL_PWR_PVDLEVEL_2
269 * @arg @ref LL_PWR_PVDLEVEL_3
270 * @arg @ref LL_PWR_PVDLEVEL_4
271 * @arg @ref LL_PWR_PVDLEVEL_5
272 * @arg @ref LL_PWR_PVDLEVEL_6
273 * @arg @ref LL_PWR_PVDLEVEL_7
274 */
LL_PWR_GetPVDLevel(void)275 __STATIC_INLINE uint32_t LL_PWR_GetPVDLevel(void)
276 {
277 return (uint32_t)(READ_BIT(PWR->CR, PWR_CR_PLS));
278 }
279
280 /**
281 * @brief Enable Power Voltage Detector
282 * @rmtoll CR PVDE LL_PWR_EnablePVD
283 * @retval None
284 */
LL_PWR_EnablePVD(void)285 __STATIC_INLINE void LL_PWR_EnablePVD(void)
286 {
287 SET_BIT(PWR->CR, PWR_CR_PVDE);
288 }
289
290 /**
291 * @brief Disable Power Voltage Detector
292 * @rmtoll CR PVDE LL_PWR_DisablePVD
293 * @retval None
294 */
LL_PWR_DisablePVD(void)295 __STATIC_INLINE void LL_PWR_DisablePVD(void)
296 {
297 CLEAR_BIT(PWR->CR, PWR_CR_PVDE);
298 }
299
300 /**
301 * @brief Check if Power Voltage Detector is enabled
302 * @rmtoll CR PVDE LL_PWR_IsEnabledPVD
303 * @retval State of bit (1 or 0).
304 */
LL_PWR_IsEnabledPVD(void)305 __STATIC_INLINE uint32_t LL_PWR_IsEnabledPVD(void)
306 {
307 return (READ_BIT(PWR->CR, PWR_CR_PVDE) == (PWR_CR_PVDE));
308 }
309
310 /**
311 * @brief Enable the WakeUp PINx functionality
312 * @rmtoll CSR EWUP LL_PWR_EnableWakeUpPin
313 * @param WakeUpPin This parameter can be one of the following values:
314 * @arg @ref LL_PWR_WAKEUP_PIN1
315 * @retval None
316 */
LL_PWR_EnableWakeUpPin(uint32_t WakeUpPin)317 __STATIC_INLINE void LL_PWR_EnableWakeUpPin(uint32_t WakeUpPin)
318 {
319 SET_BIT(PWR->CSR, WakeUpPin);
320 }
321
322 /**
323 * @brief Disable the WakeUp PINx functionality
324 * @rmtoll CSR EWUP LL_PWR_DisableWakeUpPin
325 * @param WakeUpPin This parameter can be one of the following values:
326 * @arg @ref LL_PWR_WAKEUP_PIN1
327 * @retval None
328 */
LL_PWR_DisableWakeUpPin(uint32_t WakeUpPin)329 __STATIC_INLINE void LL_PWR_DisableWakeUpPin(uint32_t WakeUpPin)
330 {
331 CLEAR_BIT(PWR->CSR, WakeUpPin);
332 }
333
334 /**
335 * @brief Check if the WakeUp PINx functionality is enabled
336 * @rmtoll CSR EWUP LL_PWR_IsEnabledWakeUpPin
337 * @param WakeUpPin This parameter can be one of the following values:
338 * @arg @ref LL_PWR_WAKEUP_PIN1
339 * @retval State of bit (1 or 0).
340 */
LL_PWR_IsEnabledWakeUpPin(uint32_t WakeUpPin)341 __STATIC_INLINE uint32_t LL_PWR_IsEnabledWakeUpPin(uint32_t WakeUpPin)
342 {
343 return (READ_BIT(PWR->CSR, WakeUpPin) == (WakeUpPin));
344 }
345
346
347 /**
348 * @}
349 */
350
351 /** @defgroup PWR_LL_EF_FLAG_Management FLAG_Management
352 * @{
353 */
354
355 /**
356 * @brief Get Wake-up Flag
357 * @rmtoll CSR WUF LL_PWR_IsActiveFlag_WU
358 * @retval State of bit (1 or 0).
359 */
LL_PWR_IsActiveFlag_WU(void)360 __STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_WU(void)
361 {
362 return (READ_BIT(PWR->CSR, PWR_CSR_WUF) == (PWR_CSR_WUF));
363 }
364
365 /**
366 * @brief Get Standby Flag
367 * @rmtoll CSR SBF LL_PWR_IsActiveFlag_SB
368 * @retval State of bit (1 or 0).
369 */
LL_PWR_IsActiveFlag_SB(void)370 __STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_SB(void)
371 {
372 return (READ_BIT(PWR->CSR, PWR_CSR_SBF) == (PWR_CSR_SBF));
373 }
374
375 /**
376 * @brief Indicate whether VDD voltage is below the selected PVD threshold
377 * @rmtoll CSR PVDO LL_PWR_IsActiveFlag_PVDO
378 * @retval State of bit (1 or 0).
379 */
LL_PWR_IsActiveFlag_PVDO(void)380 __STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_PVDO(void)
381 {
382 return (READ_BIT(PWR->CSR, PWR_CSR_PVDO) == (PWR_CSR_PVDO));
383 }
384
385 /**
386 * @brief Clear Standby Flag
387 * @rmtoll CR CSBF LL_PWR_ClearFlag_SB
388 * @retval None
389 */
LL_PWR_ClearFlag_SB(void)390 __STATIC_INLINE void LL_PWR_ClearFlag_SB(void)
391 {
392 SET_BIT(PWR->CR, PWR_CR_CSBF);
393 }
394
395 /**
396 * @brief Clear Wake-up Flags
397 * @rmtoll CR CWUF LL_PWR_ClearFlag_WU
398 * @retval None
399 */
LL_PWR_ClearFlag_WU(void)400 __STATIC_INLINE void LL_PWR_ClearFlag_WU(void)
401 {
402 SET_BIT(PWR->CR, PWR_CR_CWUF);
403 }
404
405 /**
406 * @}
407 */
408
409 #if defined(USE_FULL_LL_DRIVER)
410 /** @defgroup PWR_LL_EF_Init De-initialization function
411 * @{
412 */
413 ErrorStatus LL_PWR_DeInit(void);
414 /**
415 * @}
416 */
417 #endif /* USE_FULL_LL_DRIVER */
418
419 /**
420 * @}
421 */
422
423 /**
424 * @}
425 */
426
427 #endif /* defined(PWR) */
428
429 /**
430 * @}
431 */
432
433 #ifdef __cplusplus
434 }
435 #endif
436
437 #endif /* __STM32F1xx_LL_PWR_H */
438