|
STM32G474xx HAL 用户手册
|
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 外,所有时钟关闭