?? stm32l1xx_pwr.c
字號:
by using the PWR_FastWakeUpCmd() function (setting the FWU bit (Fast
wakeup) in the PWR_CR register) before entering Stop/Standby mode.
@endverbatim
* @{
*/
/**
* @brief Enables or disables the Fast WakeUp from Ultra Low Power mode.
* @param NewState: new state of the Fast WakeUp functionality.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void PWR_FastWakeUpCmd(FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NewState));
*(__IO uint32_t *) CR_FWU_BB = (uint32_t)NewState;
}
/**
* @brief Enables or disables the Ultra Low Power mode.
* @param NewState: new state of the Ultra Low Power mode.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void PWR_UltraLowPowerCmd(FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NewState));
*(__IO uint32_t *) CR_ULP_BB = (uint32_t)NewState;
}
/**
* @}
*/
/** @defgroup PWR_Group5 Voltage Scaling configuration functions
* @brief Voltage Scaling configuration functions
*
@verbatim
==============================================================================
##### Voltage Scaling configuration functions #####
==============================================================================
(+) The dynamic voltage scaling is a power management technique which consists in
increasing or decreasing the voltage used for the digital peripherals (VCORE),
according to the circumstances.
[..] Depending on the device voltage range, the maximum frequency and FLASH wait
state should be adapted accordingly:
[..]
+------------------------------------------------------------------+
| Wait states | HCLK clock frequency (MHz) |
| |------------------------------------------------|
| (Latency) | voltage range | voltage range |
| | 1.65 V - 3.6 V | 2.0 V - 3.6 V |
| |----------------|---------------|---------------|
| | Range 3 | Range 2 | Range 1 |
| | VCORE = 1.2 V | VCORE = 1.5 V | VCORE = 1.8 V |
|---------------- |----------------|---------------|---------------|
| 0WS(1CPU cycle) |0 < HCLK <= 2 |0 < HCLK <= 8 |0 < HCLK <= 16 |
|-----------------|----------------|---------------|---------------|
| 1WS(2CPU cycle) |2 < HCLK <= 4 |8 < HCLK <= 16 |16 < HCLK <= 32|
|-----------------|----------------|---------------|---------------|
| CPU Performance | Low | Medium | High |
|-----__----------|----------------|---------------|---------------|
|Power Performance| High | Medium | Low |
+------------------------------------------------------------------+
(+) To modify the Product voltage range, user application has to:
(++) Check VDD to identify which ranges are allowed (see table above).
(++) Check the PWR_FLAG_VOSF (Voltage Scaling update ongoing) using the PWR_GetFlagStatus()
function and wait until it is reset.
(++) Configure the Voltage range using the PWR_VoltageScalingConfig() function.
(+) When VCORE range 1 is selected and VDD drops below 2.0 V, the application must
reconfigure the system:
(++) Detect that VDD drops below 2.0 V using the PVD Level 1.
(++) Adapt the clock frequency to the voltage range that will be selected at next step.
(++) Select the required voltage range.
(++) When VCORE range 2 or range 3 is selected and VDD drops below 2.0 V, no system
reconfiguration is required.
(+) When VDD is above 2.0 V, any of the 3 voltage ranges can be selected.
(++) When the voltage range is above the targeted voltage range (e.g. from range
1 to 2).
(++) Adapt the clock frequency to the lower voltage range that will be selected
at next step.
(++) Select the required voltage range.
(++) When the voltage range is below the targeted voltage range (e.g. from range
3 to 1).
(++) Select the required voltage range.
(++) Tune the clock frequency if needed.
(+) When VDD is below 2.0 V, only range 2 and 3 can be selected:
(++) From range 2 to range 3.
(+++) Adapt the clock frequency to voltage range 3.
(+++) Select voltage range 3.
(++) From range 3 to range 2.
(+++) Select the voltage range 2.
(+++) Tune the clock frequency if needed.
@endverbatim
* @{
*/
/**
* @brief Configures the voltage scaling range.
* @note During voltage scaling configuration, the system clock is stopped
* until the regulator is stabilized (VOSF = 0). This must be taken
* into account during application developement, in case a critical
* reaction time to interrupt is needed, and depending on peripheral
* used (timer, communication,...).
*
* @param PWR_VoltageScaling: specifies the voltage scaling range.
* This parameter can be:
* @arg PWR_VoltageScaling_Range1: Voltage Scaling Range 1 (VCORE = 1.8V).
* @arg PWR_VoltageScaling_Range2: Voltage Scaling Range 2 (VCORE = 1.5V).
* @arg PWR_VoltageScaling_Range3: Voltage Scaling Range 3 (VCORE = 1.2V)
* @retval None
*/
void PWR_VoltageScalingConfig(uint32_t PWR_VoltageScaling)
{
uint32_t tmp = 0;
/* Check the parameters */
assert_param(IS_PWR_VOLTAGE_SCALING_RANGE(PWR_VoltageScaling));
tmp = PWR->CR;
tmp &= CR_VOS_MASK;
tmp |= PWR_VoltageScaling;
PWR->CR = tmp & 0xFFFFFFF3;
}
/**
* @}
*/
/** @defgroup PWR_Group6 Low Power modes configuration functions
* @brief Low Power modes configuration functions
*
@verbatim
==============================================================================
##### Low Power modes configuration functions #####
==============================================================================
[..] The devices feature five low-power modes:
(+) Low power run mode: regulator in low power mode, limited clock frequency,
limited number of peripherals running.
(+) Sleep mode: Cortex-M3 core stopped, peripherals kept running.
(+) Low power sleep mode: Cortex-M3 core stopped, limited clock frequency,
limited number of peripherals running, regulator in low power mode.
(+) Stop mode: all clocks are stopped, regulator running, regulator in low power mode.
(+) Standby mode: VCORE domain powered off.
*** Low power run mode (LP run) ***
===================================
[..]
(+) Entry:
(++) Decrease the system frequency.
(++) The regulator is forced in low power mode using the PWR_EnterLowPowerRunMode()
function.
(+) Exit:
(++) The regulator is forced in Main regulator mode sing the PWR_EnterLowPowerRunMode()
function.
(++) Increase the system frequency if needed.
*** Sleep mode ***
==================
[..]
(+) Entry:
(++) The Sleep mode is entered by using the PWR_EnterSleepMode(PWR_Regulator_ON,)
function with regulator ON.
(+) Exit:
(++) Any peripheral interrupt acknowledged by the nested vectored interrupt
controller (NVIC) can wake up the device from Sleep mode.
*** Low power sleep mode (LP sleep) ***
=======================================
[..]
(+) Entry:
(++) The Flash memory must be switched off by using the FLASH_SLEEPPowerDownCmd()
function.
(++) Decrease the system frequency.
(++) The regulator is forced in low power mode and the WFI or WFE instructions
are executed using the PWR_EnterSleepMode(PWR_Regulator_LowPower,) function
with regulator in LowPower.
(+) Exit:
(++) Any peripheral interrupt acknowledged by the nested vectored interrupt
controller (NVIC) can wake up the device from Sleep LP mode.
*** Stop mode ***
=================
[..] In Stop mode, all clocks in the VCORE domain are stopped, the PLL, the MSI,
the HSI and the HSE RC oscillators are disabled. Internal SRAM and register
contents are preserved.
The voltage regulator can be configured either in normal or low-power mode.
To minimize the consumption In Stop mode, VREFINT, the BOR, PVD, and temperature
sensor can be switched off before entering the Stop mode. They can be switched
on again by software after exiting the Stop mode using the PWR_UltraLowPowerCmd()
function.
(+) Entry:
(++) The Stop mode is entered using the PWR_EnterSTOPMode(PWR_Regulator_LowPower,)
function with regulator in LowPower or with Regulator ON.
(+) Exit:
(++) Any EXTI Line (Internal or External) configured in Interrupt/Event mode.
*** Standby mode ***
====================
[..] The Standby mode allows to achieve the lowest power consumption. It is based
on the Cortex-M3 deepsleep mode, with the voltage regulator disabled.
The VCORE domain is consequently powered off. The PLL, the MSI, the HSI
oscillator and the HSE oscillator are also switched off. SRAM and register
contents are lost except for the RTC registers, RTC backup registers and
Standby circuitry.
[..] The voltage regulator is OFF.
[..] To minimize the consumption In Standby mode, VREFINT, the BOR, PVD, and temperature
sensor can be switched off before entering the Standby mode. They can be switched
on again by software after exiting the Standby mode using the PWR_UltraLowPowerCmd()
function.
(+) Entry:
(++) The Standby mode is entered using the PWR_EnterSTANDBYMode() function.
(+) Exit:
(++) WKUP pin rising edge, RTC alarm (Alarm A and Alarm B), RTC wakeup,
tamper event, time-stamp event, external reset in NRST pin, IWDG reset.
*** Auto-wakeup (AWU) from low-power mode ***
=============================================
[..]The MCU can be woken up from low-power mode by an RTC Alarm event, an RTC
Wakeup event, a tamper event, a time-stamp event, or a comparator event,
without depending on an external interrupt (Auto-wakeup mode).
(+) RTC auto-wakeup (AWU) from the Stop mode
(++) To wake up from the Stop mode with an RTC alarm event, it is necessary to:
(+++) Configure the EXTI Line 17 to be sensitive to rising edges (Interrupt
or Event modes) using the EXTI_Init() function.
(+++) Enable the RTC Alarm Interrupt using the RTC_ITConfig() function
(+++) Configure the RTC to generate the RTC alarm using the RTC_SetAlarm()
and RTC_AlarmCmd() functions.
(++) To wake up from the Stop mode with an RTC Tamper or time stamp event, it
is necessary to:
(+++) Configure the EXTI Line 19 to be sensitive to rising edges (Interrupt
or Event modes) using the EXTI_Init() function.
(+++) Enable the RTC Tamper or time stamp Interrupt using the RTC_ITConfig()
function.
(+++) Configure the RTC to detect the tamper or time stamp event using the
RTC_TimeStampConfig(), RTC_TamperTriggerConfig() and RTC_TamperCmd()
functions.
(++) To wake up from the Stop mode with an RTC WakeUp event, it is necessary to:
(+++) Configure the EXTI Line 20 to be sensitive to rising edges (Interrupt
or Event modes) using the EXTI_Init() function.
(+++) Enable the RTC WakeUp Interrupt using the RTC_ITConfig() function.
(+++) Configure the RTC to generate the RTC WakeUp event using the RTC_WakeUpClockConfig(),
RTC_SetWakeUpCounter() and RTC_WakeUpCmd() functions.
(+) RTC auto-wakeup (AWU) from the Standby mode
(++) To wake up from the Standby mode with an RTC alarm event, it is necessary to:
(+++) Enable the RTC Alarm Interrupt using the RTC_ITConfig() function.
(+++) Configure the RTC to generate the RTC alarm using the RTC_SetAlarm()
and RTC_AlarmCmd() functions.
(++) To wake up from the Standby mode with an RTC Tamper or time stamp event, it
is necessary to:
(+++) Enable the RTC Tamper or time stamp Interrupt using the RTC_ITConfig()
function.
(+++) Configure the RTC to detect the tamper or time stamp event using the
RTC_TimeStampConfig(), RTC_TamperTriggerConfig() and RTC_TamperCmd()
functions.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -