打印

HAL库源文件stm32h7xx_hal_pwr.c学习笔记,主要是睡眠,停机,待机的低功耗处理(2018-12-30 V1.0)

[复制链接]
348|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
丑帅丑帅的|  楼主 | 2018-8-10 09:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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);

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

741

主题

742

帖子

0

粉丝