1、上电复位后,备份域(RTC registers, RTC backup data registers 和 backup SRAM)是受保护的,防止意外的写操作。
void HAL_PWR_DeInit(void)
void HAL_PWR_EnableBkUpAccess(void)
void HAL_PWR_DisableBkUpAccess(void)
2、PVD配置
(1)PVD用于监测VDD电源供电情况,通过与寄存器PWR_CR1的PLS[7:0]位设置的PVD阀值做比较。
(2)PVDO标准可以监测VDD是高于设置的阀值还是低于设置的阀值,在内部是与EXTI Line16连接。
(3)通过函数__HAL_PWR_PVD_EXTI_ENABLE_IT可以使能此中断。
(4)在待机模式,PVD停止工作。
3、唤醒引脚配置
(1)唤醒引脚用于将系统从待机模式唤醒
(2)唤醒引脚可以通过WKUPEPR寄存器配置引脚的上拉电阻,下拉电阻或者无上拉下拉电阻。
(3)唤醒引脚的极性也可以通过寄存器WKUPEPR配置,可以设置上升沿或者下降沿唤醒。
(4)STM32H7系列有6个唤醒引脚。
4、低功耗模式
STM32H7支持三种低功耗模式
(1)休眠模式:CM7内核停止运行,D1,D2和D3域的外设继续运行。
(2)停机模式:所有时钟停止,稳压器在主电源或低功率模式下运行。
(3)待机模式:D1,D2和D3域进去DSTANDBY模式,VCORE的供电稳压器关闭。
5、休眠模式
(1)进入方式
HAL_PWR_EnterSLEEPMode(Regulator, SLEEPEntry)
参数Regulator
STM32H7用不到这个参数,是为了跟STM32L系列的API保持兼容。
参数SLEEPEntry
PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction
PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction
(2)退出方式
任何受NVIC控制的中断都可以唤醒休眠模式。
6、停机模式
在系统停止模式下,1.2V域中的所有时钟都停止,PLL,HSI和HSE RC振荡器被禁用。 内部SRAM和寄存器内容保留。
电压调节器可配置为正常或低功耗模式。为了进一步降低停机模式下的功耗,可以使用函数HAL_PWREx_EnableFlashPowerDown先关闭FLASH电源,再进入停止模式。退出停止模式后,再使用函数HAL_PWREx_DisableFlashPowerDown()打开。
(1)进入方式
函数HAL_PWR_EnterSTOPMode(Regulator, STOPEntry)
参数 Regulator:
PWR_MAINREGULATOR_ON: Main regulator ON.
PWR_LOWPOWERREGULATOR_ON: Low Power regulator ON.
参数STOPEntry:
PWR_STOPENTRY_WFI: enter STOP mode with WFI instruction
PWR_STOPENTRY_WFE: enter STOP mode with WFE instruction
(2)退出方式
在中断/事件模式下配置的任何EXTI Line(内部或外部)。
7、待机模式
系统待机模式允许实现最低功耗。它是基于Cortex-M7深度睡眠模式下,禁用电压调节器,因此系统断电。
PLL,HSI振荡器和HSE振荡器也被关闭。
SRAM和寄存器内容丢失,除了RTC寄存器,RTC备份寄存器,备份SRAM和待机电路。
进入方式:
使用HAL_PWR_EnterSTANDBYMode()函数输入待机模式。
退出方式:
WKUP引脚上升沿或下降沿,RTC Alarm(Alarm A和Alarm B),RTC唤醒,入侵事件,时间戳事件,NRST引脚的外部复位,IWDG复位。
8、从低功耗模式自动唤醒(AWU Auto-wakeup)
通过RTC Alarm 事件,唤醒事件,入侵事件或时间戳事件唤醒MCU,而不依赖于外部中断(AWU)。
STOP和STANDBY模式下的RTC自动唤醒(AWU)
(1)使用RTC Alarm事件唤醒停止模式,使用函数HAL_RTC_SetAlarm_IT配置RTC Alarm。
(2)使用RTC 入侵或时间戳事件唤醒停机模式。使用函数HAL_RTCEx_SetTimeStamp_IT()或HAL_RTCEx_SetTamper_IT()进行配置。
(3)使用RTC WakeUp事件唤醒停止模式,使用函数HAL_RTCEx_SetWakeUpTimer_IT()配置RTC WakeUp事件。
/* Initialization and de-initialization functions */
void HAL_PWR_DeInit(void);
void HAL_PWR_EnableBkUpAccess(void);
void HAL_PWR_DisableBkUpAccess(void);
/* PVD configuration */
void HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD);
void HAL_PWR_EnablePVD(void);
void HAL_PWR_DisablePVD(void);
/* WakeUp pins configuration */
void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinPolarity);
void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx);
/* Low Power modes entry */
void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry);
void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry);
void HAL_PWR_EnterSTANDBYMode(void);
/* Power PVD IRQ Handler */
void HAL_PWR_PVD_IRQHandler(void);
void HAL_PWR_PVDCallback(void);
/* Cortex System Control functions */
void HAL_PWR_EnableSleepOnExit(void);
void HAL_PWR_DisableSleepOnExit(void);
void HAL_PWR_EnableSEVOnPend(void);
void HAL_PWR_DisableSEVOnPend(void); |