STM32G474xx HAL 用户手册
stm32g4xx_hal_pwr.c
转到此文件的文档。
00001 /**
00002   ******************************************************************************
00003   * @file    stm32g4xx_hal_pwr.c
00004   * @author  MCD Application Team
00005   * @brief   PWR HAL 模块驱动。
00006   *          该文件提供固件函数,用于管理电源控制器(PWR)外设的以下功能:
00007   *           + 初始化/反初始化函数
00008   *           + 外设控制函数
00009   *
00010   ******************************************************************************
00011   * @attention
00012   *
00013   * 版权所有 (c) 2019 STMicroelectronics。
00014   * 保留所有权利。
00015   *
00016   * 本软件根据 LICENSE 文件中的条款许可,该文件位于
00017   * 本软件组件的根目录中。
00018   * 如果本软件未附带任何 LICENSE 文件,则按“原样”提供。
00019   *
00020   ******************************************************************************
00021   */
00022 
00023 /* Includes ------------------------------------------------------------------*/
00024 #include "stm32g4xx_hal.h"
00025 
00026 /** @addtogroup STM32G4xx_HAL_Driver
00027   * @{
00028   */
00029 
00030 /** @defgroup PWR PWR
00031   * @brief PWR HAL 模块驱动
00032   * @{
00033   */
00034 
00035 #ifdef HAL_PWR_MODULE_ENABLED
00036 
00037 /* Private typedef -----------------------------------------------------------*/
00038 /* Private define ------------------------------------------------------------*/
00039 
00040 /** @defgroup PWR_Private_Defines PWR 私有定义
00041   * @{
00042   */
00043 
00044 /** @defgroup PWR_PVD_Mode_Mask PWR PVD 模式掩码
00045   * @{
00046   */
00047   */
00048 #define PVD_MODE_IT               ((uint32_t)0x00010000)  /*!< 用于 PVD 阈值跨越产生的中断掩码 */
00049 #define PVD_MODE_EVT              ((uint32_t)0x00020000)  /*!< 用于 PVD 阈值跨越产生的事件掩码 */
00050 #define PVD_RISING_EDGE           ((uint32_t)0x00000001)  /*!< 用于设置为 PVD 触发的上升沿掩码 */
00051 #define PVD_FALLING_EDGE          ((uint32_t)0x00000002)  /*!< 用于设置为 PVD 触发的下降沿掩码 */
00052 /**
00053   * @}
00054   */
00055 
00056 /**
00057   * @}
00058   */
00059 
00060 /* Private macro -------------------------------------------------------------*/
00061 /* Private variables ---------------------------------------------------------*/
00062 /* Private function prototypes -----------------------------------------------*/
00063 /* Exported functions --------------------------------------------------------*/
00064 
00065 /** @defgroup PWR_Exported_Functions PWR 导出函数
00066   * @{
00067   */
00068 
00069 /** @defgroup PWR_Exported_Functions_Group1 初始化和反初始化函数
00070   *  @brief    初始化和反初始化函数
00071   *
00072 @verbatim
00073  ===============================================================================
00074               ##### 初始化和反初始化函数 #####
00075  ===============================================================================
00076     [..]
00077 
00078 @endverbatim
00079   * @{
00080   */
00081 
00082 /**
00083   * @brief  将 HAL PWR 外设寄存器反初始化为其默认复位值。
00084   * @retval 无
00085   */
00086 void HAL_PWR_DeInit(void)
00087 {
00088   __HAL_RCC_PWR_FORCE_RESET();
00089   __HAL_RCC_PWR_RELEASE_RESET();
00090 }
00091 
00092 /**
00093   * @brief 启用对备份域的访问
00094   *        (RTC 寄存器、RTC 备份数据寄存器)。
00095   * @note  复位后,备份域受到保护,以防止
00096   *        可能的意外写入访问。
00097   * @note  RTCSEL(设置 RTC 时钟源选择)位于 RTC 备份域中。
00098   *        为了设置或修改 RTC 时钟,必须禁用备份域访问。
00099   * @note  LSEON 位(用于开启和关闭 LSE 晶振)也属于备份域。
00100   * @retval 无
00101   */
00102   */
00103   */
00104 void HAL_PWR_EnableBkUpAccess(void)
00105 {
00106   SET_BIT(PWR->CR1, PWR_CR1_DBP);
00107 }
00108 
00109 /**
00110   * @brief 禁用对备份域的访问
00111   *        (RTC 寄存器、RTC 备份数据寄存器)。
00112   * @retval 无
00113   */
00114 void HAL_PWR_DisableBkUpAccess(void)
00115 {
00116   CLEAR_BIT(PWR->CR1, PWR_CR1_DBP);
00117 }
00118 
00119 
00120 
00121 
00122 /**
00123   * @}
00124   */
00125 
00126 
00127 
00128 /** @defgroup PWR_Exported_Functions_Group2 外设控制函数
00129   *  @brief 低功耗模式配置函数
00130   *
00131 @verbatim
00132 
00133  ===============================================================================
00134                  ##### 外设控制函数 #####
00135  ===============================================================================
00136 
00137      [..]
00138      *** PVD 配置 ***
00139     =========================
00140     [..]
00141       (+) PVD 用于监控 VDD 电源,通过将其与
00142           PVD 级别选择的阈值进行比较(PWR_CR2 寄存器中的 PLS[2:0] 位)。
00143 
00144       (+) PVDO 标志可用于指示 VDD/VDDA 是高于还是低于
00145           PVD 阈值。此事件在内部连接到 EXTI
00146           线 16,如果启用,可以产生中断。这是通过
00147           __HAL_PVD_EXTI_ENABLE_IT() 宏完成的。
00148       (+) PVD 在待机模式下停止。
00149 
00150 
00151     *** 唤醒引脚配置 ***
00152     ================================
00153     [..]
00154       (+) 唤醒引脚用于将系统从待机模式或停机模式唤醒。
00155           这些引脚的极性可以设置,以配置高电平(上升沿)或低电平(下降沿)的事件检测。
00156 
00157 
00158 
00159     *** 低功耗模式配置 ***
00160     =====================================
00161     [..]
00162       器件具有 8 种低功耗模式:
00163       (+) 低功耗运行模式:内核和外设运行,主调节器关闭,低功耗调节器开启。
00164       (+) 睡眠模式:Cortex-M4 内核停止,外设继续运行,主调节器和低功耗调节器开启。
00165       (+) 低功耗睡眠模式:Cortex-M4 内核停止,外设继续运行,主调节器关闭,低功耗调节器开启。
00166       (+) 停止 0 模式:除 LSI 和 LSE 外,所有时钟停止,主调节器和低功耗调节器开启。
00167       (+) 停止 1 模式:除 LSI 和 LSE 外,所有时钟停止,主调节器关闭,低功耗调节器开启。
00168       (+) 带 SRAM2 的待机模式:除 LSI 和 LSE 外,所有时钟停止,SRAM2 内容保留,主调节器关闭,低功耗调节器开启。
00169       (+) 不带 SRAM2 的待机模式:除 LSI 和 LSE 外,所有时钟停止,主调节器和低功耗调节器关闭。
00170       (+) 停机模式:除 LSE 外,所有时钟停止,主调节器和低功耗调节器关闭。
00171 
00172 
00173    *** 低功耗运行模式 ***
00174    ==========================
00175     [..]
00176       (+) 进入:(从主运行模式)
00177         (++) 在将系统时钟降低到 2 MHz 以下后,使用 HAL_PWREx_EnableLowPowerRunMode() API 设置 LPR 位。
00178 
00179       (+) 退出:
00180         (++) 清除 LPR 位,然后等待 REGLP 位复位,使用 HAL_PWREx_DisableLowPowerRunMode() API。只有
00181              在此时,系统时钟频率才能增加到 2 MHz 以上。
00182 
00183 
00184    *** 睡眠模式 / 低功耗睡眠模式 ***
00185    =========================================
00186     [..]
00187       (+) 进入:
00188           通过 HAL_PWR_EnterSLEEPMode() API 进入睡眠模式/低功耗睡眠模式,
00189           指定调节器是否强制进入低功耗模式,以及退出是通过中断还是事件触发。
00190           (++) PWR_MAINREGULATOR_ON:睡眠模式(调节器在主模式)。
00191           (++) PWR_LOWPOWERREGULATOR_ON:低功耗睡眠(调节器在低功耗模式)。
00192           在后一种情况下,系统时钟频率必须事先降低到 2 MHz 以下。
00193           (++) PWR_SLEEPENTRY_WFI:使用 WFI 指令进入 SLEEP 模式
00194           (++) PWR_SLEEPENTRY_WFE:使用 WFE 指令进入 SLEEP 模式
00195 
00196       (+) WFI 退出:
00197         (++) 嵌套向量中断控制器 (NVIC) 确认的任何外设中断或任何唤醒事件。
00198 
00199       (+) WFE 退出:
00200         (++) 任何唤醒事件,例如配置为事件模式的 EXTI 线。
00201 
00202          [..] 当通过发出中断或唤醒事件退出低功耗睡眠模式时,
00203              MCU 处于低功耗运行模式。
00204 
00205    *** 停止 0、停止 1 模式 ***
00206    ===============================
00207     [..]
00208       (+) 进入:
00209           停止 0、停止 1 模式通过以下 API 进入:
00210           (++) HAL_PWREx_EnterSTOP0Mode() 用于模式 0,或 HAL_PWREx_EnterSTOP1Mode() 用于模式 1,或出于移植原因使用 HAL_PWR_EnterSTOPMode()。
00211       (+) 调节器设置(仅适用于 HAL_PWR_EnterSTOPMode()):
00212           (++) PWR_MAINREGULATOR_ON
00213           (++) PWR_LOWPOWERREGULATOR_ON
00214       (+) 退出(中断或事件触发,在进入 STOP 模式时指定):
00215           (++) PWR_STOPENTRY_WFI:使用 WFI 指令进入停止模式
00216           (++) PWR_STOPENTRY_WFE:使用 WFE 指令进入停止模式
00217 
00218       (+) WFI 退出:
00219           (++) 任何配置为中断模式的 EXTI 线(内部或外部)。
00220           (++) 某些特定通信外设(USART、LPUART、I2C)的中断
00221                在编程为唤醒模式时。
00222       (+) WFE 退出:
00223           (++) 任何配置为事件模式的 EXTI 线(内部或外部)。
00224 
00225        [..]
00226           当退出停止 0 和停止 1 模式时,MCU 处于运行模式或低功耗运行模式,
00227           具体取决于 LPR 位的设置。
00228 
00229    *** 待机模式 ***
00230    ====================
00231      [..]
00232       待机模式提供两个选项:
00233       (+) 选项 a) 除 LSI 和 LSE 外,所有时钟关闭