generated from Template/H563ZI-HAL-CMake-Template
845 lines
28 KiB
C
845 lines
28 KiB
C
/**
|
|
******************************************************************************
|
|
* @file stm32h5xx_hal_pwr_ex.c
|
|
* @author MCD Application Team
|
|
* @brief Extended PWR HAL module driver.
|
|
* This file provides firmware functions to manage the following
|
|
* functionalities of the Power Controller extension peripheral :
|
|
* + Power Supply Control Functions
|
|
* + Voltage Monitoring Functions
|
|
* + Wakeup Pins configuration Functions
|
|
* + Memories Retention Functions
|
|
* + IO and JTAG Retention Functions
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* Copyright (c) 2023 STMicroelectronics.
|
|
* All rights reserved.
|
|
*
|
|
* This software is licensed under terms that can be found in the LICENSE file
|
|
* in the root directory of this software component.
|
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "stm32h5xx_hal.h"
|
|
|
|
/** @addtogroup STM32H5xx_HAL_Driver
|
|
* @{
|
|
*/
|
|
|
|
/** @defgroup PWREx PWREx
|
|
* @brief PWR Extended HAL module driver
|
|
* @{
|
|
*/
|
|
|
|
#if defined (HAL_PWR_MODULE_ENABLED)
|
|
|
|
/* Private typedef -----------------------------------------------------------*/
|
|
/* Private define ------------------------------------------------------------*/
|
|
|
|
/** @defgroup PWR_Extended_Private_Defines PWR Extended Private Defines
|
|
* @{
|
|
*/
|
|
/* PORTI pins mask */
|
|
#define PWR_PORTI_AVAILABLE_PINS (0xFFU)
|
|
/*!< Time out value of flags setting */
|
|
#define PWR_FLAG_SETTING_DELAY (0x32U)
|
|
|
|
/** @defgroup PWR_PVM_Mode_Mask PWR PVM Mode Mask
|
|
* @{
|
|
*/
|
|
#define PVM_RISING_EDGE (0x01U) /*!< Mask for rising edge set as PVM trigger */
|
|
#define PVM_FALLING_EDGE (0x02U) /*!< Mask for falling edge set as PVM trigger */
|
|
#define PVM_MODE_IT (0x04U) /*!< Mask for interruption yielded by PVM threshold crossing */
|
|
#define PVM_MODE_EVT (0x08U) /*!< Mask for event yielded by PVM threshold crossing */
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup PWREx_WakeUp_Pins_Offsets PWREx Wake-Up Pins offsets
|
|
* @{
|
|
*/
|
|
|
|
/* Wake-Up Pins PWR Pin Pull shift offsets */
|
|
#define PWR_WAKEUP_PINS_PULL_SHIFT_OFFSET (2U)
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/* Private macro -------------------------------------------------------------*/
|
|
/* Private variables ---------------------------------------------------------*/
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
/* Exported functions --------------------------------------------------------*/
|
|
|
|
/** @defgroup PWREx_Exported_Functions PWR Extended Exported Functions
|
|
* @{
|
|
*/
|
|
|
|
/** @defgroup PWREx_Exported_Functions_Group1 Power Supply Control Functions
|
|
* @brief Power supply control functions
|
|
*
|
|
@verbatim
|
|
===============================================================================
|
|
##### Power supply control functions #####
|
|
===============================================================================
|
|
[..]
|
|
@endverbatim
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @brief Configure the system Power Supply.
|
|
* @param SupplySource : Specifies the Power Supply source to set after a
|
|
* system startup.
|
|
* This parameter can be one of the following values :
|
|
* @arg PWR_EXTERNAL_SOURCE_SUPPLY : The SMPS and the LDO are
|
|
* Bypassed. The Vcore Power
|
|
* Domains are supplied from
|
|
* external source.
|
|
* @retval HAL status.
|
|
*/
|
|
HAL_StatusTypeDef HAL_PWREx_ConfigSupply(uint32_t SupplySource)
|
|
{
|
|
uint32_t tickstart;
|
|
|
|
/* Check the parameters */
|
|
assert_param(IS_PWR_SUPPLY(SupplySource));
|
|
|
|
if ((PWR->SCCR & PWR_SCCR_BYPASS) != (PWR_SCCR_BYPASS))
|
|
{
|
|
/* Set the power supply configuration */
|
|
MODIFY_REG(PWR->SCCR, PWR_SUPPLY_CONFIG_MASK, SupplySource);
|
|
|
|
/* Get tick */
|
|
tickstart = HAL_GetTick();
|
|
|
|
/* Wait till voltage level flag is set */
|
|
while (__HAL_PWR_GET_FLAG(PWR_FLAG_ACTVOSRDY) == 0U)
|
|
{
|
|
if ((HAL_GetTick() - tickstart) > PWR_FLAG_SETTING_DELAY)
|
|
{
|
|
return HAL_ERROR;
|
|
}
|
|
}
|
|
}
|
|
|
|
return HAL_OK;
|
|
}
|
|
|
|
/**
|
|
* @brief Get the power supply configuration.
|
|
* @retval The supply configuration.
|
|
*/
|
|
uint32_t HAL_PWREx_GetSupplyConfig(void)
|
|
{
|
|
return (PWR->SCCR & PWR_SUPPLY_CONFIG_MASK);
|
|
}
|
|
|
|
/**
|
|
* @brief Configure the main internal regulator output voltage.
|
|
* @param VoltageScaling : Specifies the regulator output voltage to achieve
|
|
* a tradeoff between performance and power
|
|
* consumption.
|
|
* This parameter can be one of the following values :
|
|
* @arg PWR_REGULATOR_VOLTAGE_SCALE0 : Regulator voltage output
|
|
* Scale 0 mode.
|
|
* @arg PWR_REGULATOR_VOLTAGE_SCALE1 : Regulator voltage output
|
|
* range 1 mode.
|
|
* @arg PWR_REGULATOR_VOLTAGE_SCALE2 : Regulator voltage output
|
|
* range 2 mode.
|
|
* @arg PWR_REGULATOR_VOLTAGE_SCALE3 : Regulator voltage output
|
|
* range 3 mode.
|
|
* @retval HAL Status
|
|
*/
|
|
HAL_StatusTypeDef HAL_PWREx_ControlVoltageScaling(uint32_t VoltageScaling)
|
|
{
|
|
uint32_t tickstart = HAL_GetTick();
|
|
|
|
/* Check the parameters */
|
|
assert_param(IS_PWR_VOLTAGE_SCALING_RANGE(VoltageScaling));
|
|
|
|
/* Get the voltage scaling */
|
|
if ((PWR->VOSSR & PWR_VOSSR_ACTVOS) == (VoltageScaling << 10U))
|
|
{
|
|
/* Old and new voltage scaling configuration match : nothing to do */
|
|
return HAL_OK;
|
|
}
|
|
|
|
/* Set the voltage range */
|
|
MODIFY_REG(PWR->VOSCR, PWR_VOSCR_VOS, VoltageScaling);
|
|
|
|
/* Wait till voltage level flag is set */
|
|
while (__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY) == 0U)
|
|
{
|
|
if ((HAL_GetTick() - tickstart) > PWR_FLAG_SETTING_DELAY)
|
|
{
|
|
return HAL_ERROR;
|
|
}
|
|
}
|
|
|
|
return HAL_OK;
|
|
}
|
|
|
|
/**
|
|
* @brief Get the main internal regulator output voltage. Reflecting the last
|
|
* VOS value applied to the PMU.
|
|
* @retval The current applied VOS selection.
|
|
*/
|
|
uint32_t HAL_PWREx_GetVoltageRange(void)
|
|
{
|
|
/* Get the active voltage scaling */
|
|
return (PWR->VOSSR & PWR_VOSSR_ACTVOS);
|
|
}
|
|
|
|
/**
|
|
* @brief Configure the main internal regulator output voltage in STOP mode.
|
|
* @param VoltageScaling : Specifies the regulator output voltage when the
|
|
* system enters Stop mode to achieve a tradeoff between performance
|
|
* and power consumption.
|
|
* This parameter can be one of the following values:
|
|
* @arg PWR_REGULATOR_SVOS_SCALE3 : Regulator voltage output range
|
|
* 3 mode.
|
|
* @arg PWR_REGULATOR_SVOS_SCALE4 : Regulator voltage output range
|
|
* 4 mode.
|
|
* @arg PWR_REGULATOR_SVOS_SCALE5 : Regulator voltage output range
|
|
* 5 mode.
|
|
* @note The Stop mode voltage scaling for SVOS4 and SVOS5 sets the voltage
|
|
* regulator in Low-power (LP) mode to further reduce power consumption.
|
|
* When preselecting SVOS3, the use of the voltage regulator low-power
|
|
* mode (LP) can be selected by LPDS register bit.
|
|
* @note The selected SVOS4 and SVOS5 levels add an additional startup delay
|
|
* when exiting from system Stop mode.
|
|
* @retval HAL Status.
|
|
*/
|
|
HAL_StatusTypeDef HAL_PWREx_ControlStopModeVoltageScaling(uint32_t VoltageScaling)
|
|
{
|
|
/* Check the parameters */
|
|
assert_param(IS_PWR_STOP_MODE_REGULATOR_VOLTAGE(VoltageScaling));
|
|
|
|
/* Return the stop mode voltage range */
|
|
MODIFY_REG(PWR->PMCR, PWR_PMCR_SVOS, VoltageScaling);
|
|
|
|
return HAL_OK;
|
|
}
|
|
|
|
/**
|
|
* @brief Get the main internal regulator output voltage in STOP mode.
|
|
* @retval The actual applied VOS selection.
|
|
*/
|
|
uint32_t HAL_PWREx_GetStopModeVoltageRange(void)
|
|
{
|
|
/* Return the stop voltage scaling */
|
|
return (PWR->PMCR & PWR_PMCR_SVOS);
|
|
}
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup PWREx_Exported_Functions_Group2 Voltage Monitoring Functions
|
|
* @brief Voltage monitoring functions
|
|
*
|
|
@verbatim
|
|
===============================================================================
|
|
##### Voltage Monitoring Functions #####
|
|
===============================================================================
|
|
[..]
|
|
@endverbatim
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @brief Configure the event mode and the voltage threshold detected by the
|
|
* Analog Voltage Detector (AVD).
|
|
* @param sConfigAVD : Pointer to an PWREx_AVDTypeDef structure that contains
|
|
* the configuration information for the AVD.
|
|
* @note Refer to the electrical characteristics of your device datasheet for
|
|
* more details about the voltage threshold corresponding to each
|
|
* detection level.
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_ConfigAVD(const PWREx_AVDTypeDef *sConfigAVD)
|
|
{
|
|
/* Check the parameters */
|
|
assert_param(IS_PWR_AVD_LEVEL(sConfigAVD->AVDLevel));
|
|
assert_param(IS_PWR_AVD_MODE(sConfigAVD->Mode));
|
|
|
|
/* Set the ALS[10:9] bits according to AVDLevel value */
|
|
MODIFY_REG(PWR->VMCR, PWR_VMCR_ALS, sConfigAVD->AVDLevel);
|
|
|
|
/* Clear any previous config */
|
|
__HAL_PWR_AVD_EXTI_DISABLE_EVENT();
|
|
__HAL_PWR_AVD_EXTI_DISABLE_IT();
|
|
__HAL_PWR_AVD_EXTI_DISABLE_RISING_EDGE();
|
|
__HAL_PWR_AVD_EXTI_DISABLE_FALLING_EDGE();
|
|
|
|
/* Configure the interrupt mode */
|
|
if ((sConfigAVD->Mode & AVD_MODE_IT) == AVD_MODE_IT)
|
|
{
|
|
__HAL_PWR_AVD_EXTI_ENABLE_IT();
|
|
}
|
|
|
|
/* Configure the event mode */
|
|
if ((sConfigAVD->Mode & AVD_MODE_EVT) == AVD_MODE_EVT)
|
|
{
|
|
__HAL_PWR_AVD_EXTI_ENABLE_EVENT();
|
|
}
|
|
|
|
/* Rising edge configuration */
|
|
if ((sConfigAVD->Mode & AVD_RISING_EDGE) == AVD_RISING_EDGE)
|
|
{
|
|
__HAL_PWR_AVD_EXTI_ENABLE_RISING_EDGE();
|
|
}
|
|
|
|
/* Falling edge configuration */
|
|
if ((sConfigAVD->Mode & AVD_FALLING_EDGE) == AVD_FALLING_EDGE)
|
|
{
|
|
__HAL_PWR_AVD_EXTI_ENABLE_FALLING_EDGE();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Enable the Analog Voltage Detector (AVD).
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_EnableAVD(void)
|
|
{
|
|
/* Enable the Analog Voltage Detector */
|
|
SET_BIT(PWR->VMCR, PWR_VMCR_AVDEN);
|
|
}
|
|
|
|
/**
|
|
* @brief Disable the Analog Voltage Detector(AVD).
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_DisableAVD(void)
|
|
{
|
|
/* Disable the Analog Voltage Detector */
|
|
CLEAR_BIT(PWR->VMCR, PWR_VMCR_AVDEN);
|
|
}
|
|
|
|
#if defined (PWR_USBSCR_USB33DEN)
|
|
/**
|
|
* @brief Enable the USB voltage level detector.
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_EnableUSBVoltageDetector(void)
|
|
{
|
|
/* Enable the USB voltage detector */
|
|
SET_BIT(PWR->USBSCR, PWR_USBSCR_USB33DEN);
|
|
}
|
|
|
|
/**
|
|
* @brief Disable the USB voltage level detector.
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_DisableUSBVoltageDetector(void)
|
|
{
|
|
/* Disable the USB voltage detector */
|
|
CLEAR_BIT(PWR->USBSCR, PWR_USBSCR_USB33DEN);
|
|
}
|
|
|
|
/**
|
|
* @brief Enable VDDUSB supply.
|
|
* @note Remove VDDUSB electrical and logical isolation, once VDDUSB supply
|
|
* is present for consumption saving.
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_EnableVddUSB(void)
|
|
{
|
|
SET_BIT(PWR->USBSCR, PWR_USBSCR_USB33SV);
|
|
}
|
|
|
|
/**
|
|
* @brief Disable VDDUSB supply.
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_DisableVddUSB(void)
|
|
{
|
|
CLEAR_BIT(PWR->USBSCR, PWR_USBSCR_USB33SV);
|
|
}
|
|
#endif /* PWR_USBSCR_USB33DEN */
|
|
|
|
/**
|
|
* @brief Enable the VBAT and temperature monitoring.
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_EnableMonitoring(void)
|
|
{
|
|
SET_BIT(PWR->BDCR, PWR_BDCR_MONEN);
|
|
}
|
|
|
|
/**
|
|
* @brief Disable the VBAT and temperature monitoring.
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_DisableMonitoring(void)
|
|
{
|
|
CLEAR_BIT(PWR->BDCR, PWR_BDCR_MONEN);
|
|
}
|
|
|
|
#if defined (PWR_UCPDR_UCPD_STBY)
|
|
/**
|
|
* @brief Enable UCPD configuration memorization in Standby mode.
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_EnableUCPDStandbyMode(void)
|
|
{
|
|
SET_BIT(PWR->UCPDR, PWR_UCPDR_UCPD_STBY);
|
|
}
|
|
|
|
/**
|
|
* @brief Disable UCPD configuration memorization in Standby mode.
|
|
* @note This function must be called on exiting the Standby mode and before
|
|
* any UCPD configuration update.
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_DisableUCPDStandbyMode(void)
|
|
{
|
|
CLEAR_BIT(PWR->UCPDR, PWR_UCPDR_UCPD_STBY);
|
|
}
|
|
#endif /* PWR_UCPDR_UCPD_STBY */
|
|
|
|
#if defined (PWR_UCPDR_UCPD_DBDIS)
|
|
/**
|
|
* @brief Enable dead battery behavior.
|
|
* @note After exiting reset, the USB Type-C (dead battery) behavior is
|
|
* enabled, which may have a pull-down effect on CC1 and CC2 pins.
|
|
* It is recommended to disable it in all cases, either to stop this
|
|
* pull-down or to handover control to the UCPD (the UCPD must be
|
|
* initialized before doing the disable).
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_EnableUCPDDeadBattery(void)
|
|
{
|
|
CLEAR_BIT(PWR->UCPDR, PWR_UCPDR_UCPD_DBDIS);
|
|
}
|
|
|
|
/**
|
|
* @brief Disable dead battery behavior.
|
|
* @note After exiting reset, the USB Type-C (dead battery) behavior is
|
|
* enabled, which may have a pull-down effect on CC1 and CC2 pins.
|
|
* It is recommended to disable it in all cases, either to stop this
|
|
* pull-down or to handover control to the UCPD (the UCPD must be
|
|
* initialized before doing the disable).
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_DisableUCPDDeadBattery(void)
|
|
{
|
|
SET_BIT(PWR->UCPDR, PWR_UCPDR_UCPD_DBDIS);
|
|
}
|
|
#endif /* PWR_UCPDR_UCPD_DBDIS */
|
|
|
|
/**
|
|
* @brief Enable the Battery charging.
|
|
* @note When VDD is present, charge the external battery through an internal
|
|
* resistor.
|
|
* @param ResistorValue : Specifies the charging resistor.
|
|
* This parameter can be one of the following values :
|
|
* @arg PWR_BATTERY_CHARGING_RESISTOR_5 : 5 KOhm resistor.
|
|
* @arg PWR_BATTERY_CHARGING_RESISTOR_1_5 : 1.5 KOhm resistor.
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_EnableBatteryCharging(uint32_t ResistorValue)
|
|
{
|
|
/* Check the parameter */
|
|
assert_param(IS_PWR_BATTERY_RESISTOR_SELECT(ResistorValue));
|
|
|
|
/* Specify the charging resistor */
|
|
MODIFY_REG(PWR->BDCR, PWR_BDCR_VBRS, ResistorValue);
|
|
|
|
/* Enable the Battery charging */
|
|
SET_BIT(PWR->BDCR, PWR_BDCR_VBE);
|
|
}
|
|
|
|
/**
|
|
* @brief Disable the Battery charging.
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_DisableBatteryCharging(void)
|
|
{
|
|
CLEAR_BIT(PWR->BDCR, PWR_BDCR_VBE);
|
|
}
|
|
|
|
/**
|
|
* @brief Enable the booster to guarantee the analog switch AC performance when
|
|
* the VDD supply voltage is below 2V7.
|
|
* @note The VDD supply voltage can be monitored through the PVD and the PLS
|
|
* field bits.
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_EnableAnalogBooster(void)
|
|
{
|
|
/* Enable the Analog voltage */
|
|
SET_BIT(PWR->PMCR, PWR_PMCR_AVD_READY);
|
|
|
|
/* Enable VDDA booster */
|
|
SET_BIT(PWR->PMCR, PWR_PMCR_BOOSTE);
|
|
}
|
|
|
|
/**
|
|
* @brief Disable the analog booster.
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_DisableAnalogBooster(void)
|
|
{
|
|
/* Disable VDDA booster */
|
|
CLEAR_BIT(PWR->PMCR, PWR_PMCR_BOOSTE);
|
|
|
|
/* Disable the Analog voltage */
|
|
CLEAR_BIT(PWR->PMCR, PWR_PMCR_AVD_READY);
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles the PWR PVD/AVD interrupt request.
|
|
* @note This API should be called under the PVD_AVD_IRQHandler().
|
|
* @note The use of this API is when the PVD and AVD are activated at the same time.
|
|
* @retval None
|
|
*/
|
|
void HAL_PWREx_PVD_AVD_IRQHandler(void)
|
|
{
|
|
/* Check PWR PVD AVD EXTI Rising flag */
|
|
if (__HAL_PWR_PVD_AVD_EXTI_GET_RISING_FLAG() != 0U)
|
|
{
|
|
/* Clear PWR PVD AVD EXTI Rising pending bit */
|
|
WRITE_REG(EXTI->RPR1, PWR_EXTI_LINE_AVD);
|
|
|
|
/* PWR PVD AVD Rising interrupt user callback */
|
|
HAL_PWREx_PVD_AVD_Rising_Callback();
|
|
}
|
|
|
|
/* Check PWR PVD AVD EXTI Falling flag */
|
|
if (__HAL_PWR_PVD_AVD_EXTI_GET_FALLING_FLAG() != 0U)
|
|
{
|
|
/* Clear PWR PVD AVD EXTI Falling pending bit */
|
|
WRITE_REG(EXTI->FPR1, PWR_EXTI_LINE_AVD);
|
|
|
|
/* PWR PVD AVD Falling interrupt user callback */
|
|
HAL_PWREx_PVD_AVD_Falling_Callback();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief PWR PVD AVD Rising interrupt callback.
|
|
* @retval None.
|
|
*/
|
|
__weak void HAL_PWREx_PVD_AVD_Rising_Callback(void)
|
|
{
|
|
/* NOTE : This function should not be modified, when the callback is needed,
|
|
the HAL_PWR_AVDCallback can be implemented in the user file
|
|
*/
|
|
}
|
|
|
|
/**
|
|
* @brief PWR PVD AVD Falling interrupt callback.
|
|
* @retval None.
|
|
*/
|
|
__weak void HAL_PWREx_PVD_AVD_Falling_Callback(void)
|
|
{
|
|
/* NOTE : This function should not be modified, when the callback is needed,
|
|
the HAL_PWR_AVDCallback can be implemented in the user file
|
|
*/
|
|
}
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup PWREx_Exported_Functions_Group3 Wakeup Pins configuration Functions
|
|
* @brief Wakeup Pins configuration functions
|
|
*
|
|
@verbatim
|
|
===============================================================================
|
|
##### Wakeup Pins configuration Functions #####
|
|
===============================================================================
|
|
[..]
|
|
@endverbatim
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @brief Enable the Wake-up PINx functionality.
|
|
* @param sPinParams : Pointer to a PWREx_WakeupPinTypeDef structure that
|
|
* contains the configuration information for the wake-up
|
|
* Pin.
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_EnableWakeUpPin(const PWREx_WakeupPinTypeDef *sPinParams)
|
|
{
|
|
uint32_t pinConfig;
|
|
uint32_t regMask;
|
|
const uint32_t pullMask = PWR_WUCR_WUPPUPD1;
|
|
|
|
/* Check the parameters */
|
|
assert_param(IS_PWR_WAKEUP_PIN(sPinParams->WakeUpPin));
|
|
assert_param(IS_PWR_WAKEUP_PIN_POLARITY(sPinParams->PinPolarity));
|
|
assert_param(IS_PWR_WAKEUP_PIN_PULL(sPinParams->PinPull));
|
|
|
|
pinConfig = sPinParams->WakeUpPin | \
|
|
(sPinParams->PinPolarity << ((POSITION_VAL(sPinParams->WakeUpPin) + PWR_WUCR_WUPP1_Pos) & 0x1FU)) | \
|
|
(sPinParams->PinPull << (((POSITION_VAL(sPinParams->WakeUpPin) * PWR_WAKEUP_PINS_PULL_SHIFT_OFFSET) \
|
|
+ PWR_WUCR_WUPPUPD1_Pos) & 0x1FU));
|
|
|
|
regMask = sPinParams->WakeUpPin | \
|
|
(PWR_WUCR_WUPP1 << (POSITION_VAL(sPinParams->WakeUpPin) & 0x1FU)) | \
|
|
(pullMask << ((POSITION_VAL(sPinParams->WakeUpPin) * PWR_WAKEUP_PINS_PULL_SHIFT_OFFSET) & 0x1FU));
|
|
|
|
/* Enable and Specify the Wake-Up pin polarity and the pull configuration
|
|
for the event detection (rising or falling edge) */
|
|
MODIFY_REG(PWR->WUCR, regMask, pinConfig);
|
|
}
|
|
|
|
/**
|
|
* @brief Disable the Wake-up PINx functionality.
|
|
* @param WakeUpPinx : Specifies the Wake-Up pin to be disabled.
|
|
* This parameter can be one of the following values:
|
|
* @arg PWR_WAKEUP_PIN1
|
|
* @arg PWR_WAKEUP_PIN2
|
|
* @arg PWR_WAKEUP_PIN3
|
|
* @arg PWR_WAKEUP_PIN4
|
|
* @arg PWR_WAKEUP_PIN5
|
|
* @arg PWR_WAKEUP_PIN6
|
|
* @arg PWR_WAKEUP_PIN7
|
|
* @arg PWR_WAKEUP_PIN8
|
|
* @note The PWR_WAKEUP_PIN6, PWR_WAKEUP_PIN7 and PWR_WAKEUP_PIN8 are not available for
|
|
* STM32H503xx devices.
|
|
* @retval None
|
|
*/
|
|
void HAL_PWREx_DisableWakeUpPin(uint32_t WakeUpPinx)
|
|
{
|
|
/* Check the parameter */
|
|
assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx));
|
|
|
|
/* Disable the WakeUpPin */
|
|
CLEAR_BIT(PWR->WUCR, (PWR_WUCR_WUPEN & WakeUpPinx));
|
|
}
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup PWREx_Exported_Functions_Group4 Memories Retention Functions
|
|
* @brief Memories retention functions
|
|
*
|
|
@verbatim
|
|
===============================================================================
|
|
##### Memories Retention Functions #####
|
|
===============================================================================
|
|
[..]
|
|
@endverbatim
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @brief Enable the Flash Power Down in Stop mode.
|
|
* @note When Flash Power Down is enabled the Flash memory enters low-power
|
|
* mode. This feature allows to
|
|
* obtain the best trade-off between low-power consumption and restart
|
|
* time when exiting from Stop mode.
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_EnableFlashPowerDown(void)
|
|
{
|
|
/* Enable the Flash Power Down */
|
|
SET_BIT(PWR->PMCR, PWR_PMCR_FLPS);
|
|
}
|
|
|
|
/**
|
|
* @brief Disable the Flash Power Down in Stop mode.
|
|
* @note When Flash Power Down is disabled the Flash memory is kept on
|
|
* normal mode. This feature allows
|
|
* to obtain the best trade-off between low-power consumption and
|
|
* restart time when exiting from Stop mode.
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_DisableFlashPowerDown(void)
|
|
{
|
|
/* Disable the Flash Power Down */
|
|
CLEAR_BIT(PWR->PMCR, PWR_PMCR_FLPS);
|
|
}
|
|
|
|
/**
|
|
* @brief Enable memory block shut-off in Stop mode
|
|
* @note In Stop mode, the content of the memory blocks is
|
|
* maintained. Further power optimization can be obtained by switching
|
|
* off some memory blocks. This optimization implies loss of the memory
|
|
* content. The user can select which memory is discarded during STOP
|
|
* mode by means of xxSO bits.
|
|
* @param MemoryBlock : Specifies the memory block to shut-off during Stop mode.
|
|
* This parameter can be one of the following values for STM32H573xx/STM32H563xx/STM32H562xx :
|
|
* @arg PWR_ETHERNET_MEMORY_BLOCK PWR_PMCR_ETHERNETSO : Ethernet shut-off control in Stop mode
|
|
* @arg PWR_RAM3_MEMORY_BLOCK PWR_PMCR_SRAM3SO : RAM3 shut-off control in Stop mode
|
|
* @arg PWR_RAM2_16_MEMORY_BLOCK PWR_PMCR_SRAM2_16SO : RAM2 16k byte shut-off control in Stop mode
|
|
* @arg PWR_RAM2_48_MEMORY_BLOCK PWR_PMCR_SRAM2_48SO : RAM2 48k byte shut-off control in Stop mode
|
|
* @arg PWR_RAM1_MEMORY_BLOCK PWR_PMCR_SRAM1SO : RAM1 shut-off control in Stop mode
|
|
* This parameter can be one of the following values for STM32H533xx/STM32H523xx :
|
|
* @arg PWR_RAM3_MEMORY_BLOCK PWR_PMCR_SRAM3SO : RAM3 shut-off control in Stop mode
|
|
* @arg PWR_RAM2_LOW_16_MEMORY_BLOCK PWR_PMCR_SRAM2_16LSO : RAM2 Low 16k byte shut-off control
|
|
* in Stop mode
|
|
* @arg PWR_RAM2_HIGH_16_MEMORY_BLOCK PWR_PMCR_SRAM2_16HSO : RAM2 High 16k byte shut-off control
|
|
* in Stop mode
|
|
* @arg PWR_RAM2_48_MEMORY_BLOCK PWR_PMCR_SRAM2_48SO : RAM2 48k byte shut-off control in Stop mode
|
|
* @arg PWR_RAM1_MEMORY_BLOCK PWR_PMCR_SRAM1SO : RAM1 shut-off control in Stop mode
|
|
* This parameter can be one of the following values for STM32H503xx :
|
|
* @arg PWR_RAM2_MEMORY_BLOCK PWR_PMCR_SRAM2SO : RAM2 shut-off control in Stop mode
|
|
* @arg PWR_RAM1_MEMORY_BLOCK PWR_PMCR_SRAM1SO : RAM1 shut-off control in Stop mode
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_EnableMemoryShutOff(uint32_t MemoryBlock)
|
|
{
|
|
/* Check the parameter */
|
|
assert_param(IS_PWR_MEMORY_BLOCK(MemoryBlock));
|
|
|
|
/* Enable memory block shut-off */
|
|
SET_BIT(PWR->PMCR, MemoryBlock);
|
|
}
|
|
|
|
/**
|
|
* @brief Disable memory block shut-off in Stop mode
|
|
* @param MemoryBlock : Specifies the memory block to keep content during
|
|
* Stop mode.
|
|
* This parameter can be one of the following values for STM32H573xx/STM32H563xx/STM32H562xx :
|
|
* @arg PWR_ETHERNET_MEMORY_BLOCK PWR_PMCR_ETHERNETSO : Ethernet shut-off control in Stop mode
|
|
* @arg PWR_RAM3_MEMORY_BLOCK PWR_PMCR_SRAM3SO : RAM3 shut-off control in Stop mode
|
|
* @arg PWR_RAM2_16_MEMORY_BLOCK PWR_PMCR_SRAM2_16SO : RAM2 16k byte shut-off control in Stop mode
|
|
* @arg PWR_RAM2_48_MEMORY_BLOCK PWR_PMCR_SRAM2_48SO : RAM2 48k byte shut-off control in Stop mode
|
|
* @arg PWR_RAM1_MEMORY_BLOCK PWR_PMCR_SRAM1SO : RAM1 shut-off control in Stop mode
|
|
* This parameter can be one of the following values for STM32H533xx/STM32H523xx :
|
|
* @arg PWR_RAM3_MEMORY_BLOCK PWR_PMCR_SRAM3SO : RAM3 shut-off control in Stop mode
|
|
* @arg PWR_RAM2_LOW_16_MEMORY_BLOCK PWR_PMCR_SRAM2_16LSO : RAM2 Low 16k byte shut-off control
|
|
* in Stop mode
|
|
* @arg PWR_RAM2_HIGH_16_MEMORY_BLOCK PWR_PMCR_SRAM2_16HSO : RAM2 High 16k byte shut-off control
|
|
* in Stop mode
|
|
* @arg PWR_RAM2_48_MEMORY_BLOCK PWR_PMCR_SRAM2_48SO : RAM2 48k byte shut-off control in Stop mode
|
|
* @arg PWR_RAM1_MEMORY_BLOCK PWR_PMCR_SRAM1SO : RAM1 shut-off control in Stop mode
|
|
* This parameter can be one of the following values for STM32H503xx :
|
|
* @arg PWR_RAM2_MEMORY_BLOCK PWR_PMCR_SRAM2SO : RAM2 shut-off control in Stop mode
|
|
* @arg PWR_RAM1_MEMORY_BLOCK PWR_PMCR_SRAM1SO : RAM1 shut-off control in Stop mode
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_DisableMemoryShutOff(uint32_t MemoryBlock)
|
|
{
|
|
/* Check the parameter */
|
|
assert_param(IS_PWR_MEMORY_BLOCK(MemoryBlock));
|
|
|
|
/* Disable memory block shut-off */
|
|
CLEAR_BIT(PWR->PMCR, MemoryBlock);
|
|
}
|
|
|
|
/**
|
|
* @brief Enable the Backup RAM retention in Standby and VBAT modes.
|
|
* @note If BREN is reset, the backup RAM can still be used in Run, Sleep and
|
|
* Stop modes. However, its content is lost in Standby, Shutdown and
|
|
* VBAT modes. This bit can be writte
|
|
* @retval None.
|
|
*/
|
|
HAL_StatusTypeDef HAL_PWREx_EnableBkupRAMRetention(void)
|
|
{
|
|
SET_BIT(PWR->BDCR, PWR_BDCR_BREN);
|
|
|
|
return HAL_OK;
|
|
}
|
|
|
|
/**
|
|
* @brief Disable the Backup RAM retention in Standby and VBAT modes.
|
|
* @note If BREN is reset, the backup RAM can still be used in Run, Sleep and
|
|
* Stop modes. However, its content is lost in Standby, Shutdown and
|
|
* VBAT modes. This bit can be write
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_DisableBkupRAMRetention(void)
|
|
{
|
|
CLEAR_BIT(PWR->BDCR, PWR_BDCR_BREN);
|
|
}
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup PWREx_Exported_Functions_Group5 IO and JTAG Retention Functions
|
|
* @brief IO and JTAG Retention functions
|
|
*
|
|
@verbatim
|
|
===============================================================================
|
|
##### IO and JTAG Retention Functions #####
|
|
===============================================================================
|
|
[..]
|
|
In the Standby mode, the I/Os are by default in floating state. If the IORETEN bit in the
|
|
PWR_IORETR register is set, the I/Os output state is retained. IO Retention mode is
|
|
enabled for all IO except the IO support the standby functionality and JTAG IOs (PA13,
|
|
PA14, PA15 and PB4). When entering into Standby mode, the state of the output is
|
|
sampled, and pull-up or pull-down resistor are set to maintain the IO output during Standby
|
|
mode.
|
|
If the JTAGIORETEN bit in the PWR_IORETR register is set, the I/Os output state is
|
|
retained. IO Retention mode is enabled for PA13, PA14, PA15 and PB4 (default JTAG pullup/
|
|
pull-down after wakeup are not enabled).
|
|
@endverbatim
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @brief Enable GPIO state retention in Standby mode.
|
|
* @note When entering into standby mode, the output is sampled, and applied to the output IO during
|
|
* the standby power mode
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_EnableStandbyIORetention(void)
|
|
{
|
|
/* Enable GPIO state retention */
|
|
SET_BIT(PWR->IORETR, PWR_IORETR_IORETEN);
|
|
}
|
|
|
|
/**
|
|
* @brief Disable GPIO state retention in Standby mode.
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_DisableStandbyIORetention(void)
|
|
{
|
|
/* Disable GPIO state retention */
|
|
CLEAR_BIT(PWR->IORETR, PWR_IORETR_IORETEN);
|
|
}
|
|
|
|
/**
|
|
* @brief Enable JTAG IOs state retention in Standby mode.
|
|
* @note when entering into standby mode, the output is sampled, and applied to the output IO during
|
|
* the standby power mode
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_EnableStandbyJTAGIORetention(void)
|
|
{
|
|
/* Enable JTAG IOs state retention */
|
|
SET_BIT(PWR->IORETR, PWR_IORETR_JTAGIORETEN);
|
|
}
|
|
|
|
/**
|
|
* @brief Disable JTAG IOs state retention in Standby mode.
|
|
* @retval None.
|
|
*/
|
|
void HAL_PWREx_DisableStandbyJTAGIORetention(void)
|
|
{
|
|
/* Enable JTAG IOs state retention */
|
|
CLEAR_BIT(PWR->IORETR, PWR_IORETR_JTAGIORETEN);
|
|
}
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
#endif /* defined (HAL_PWR_MODULE_ENABLED) */
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|