本文主要是介绍PWR外设,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- PWR电源管理单元
- PWR结构
- stm32供电模块
- 三种低功耗模式
- 标准库函数使用模板
- 函数使用模板
- 使能函数
- PWR标志位
PWR电源管理单元
PWR(Power control)电源控制
- PWR管理stm32内部电源供电,可实现电压检测器和低功耗模式。
- PVD(电压检测器)可监控VDD电压,低于某一阈值时触发中断,执行紧急关闭任务。
- 低功耗模式:睡眠模式(Sleep)停机模式(Stop)待机模式(Standby)
PWR结构
stm32供电模块
VDDA:模拟部分的供电。
VDD:I/O电路,待机电路,独立看门狗,电压调节器。
电压调节器(1.8V):负责CPU内核,存储器,内置外设。
VBAT:后备供电区RTC。。。
三种低功耗模式
睡眠模式:
- 唤醒后从暂停的地方继续运行
- SLEEPONEXTI为决定STM32是否立刻进入睡眠模式(或等中断处理完成后再睡眠)
- I/O口维持原有运行状态
- WFI进入的睡眠模式,可被任意一个NVIC响应的中断唤醒
- WFE进入的睡眠模式,可被唤醒事件唤醒
停止模式:
- 唤醒后从暂停的地方继续运行
- 1.8V区、PLL、HSI、HSE断电,SRAM和寄存器内容不丢失
- I/O口维持原有运行状态
- 中断或唤醒事件发生后,HSI被选中为系统时钟
- 电压调节器处于低功耗模式,启动时会有一定延时
- WFI进入的停止模式,可被任意一个EXTI中断唤醒
- WFE进入的停止模式,可被任意一个EXTI事件唤醒
待机模式:
- 唤醒后程序从头开始运行
- 1.8V区、PLL、HSI、HSE断电,SRAM和寄存器内容丢失,备份寄存器和待机电路维持供电
- I/O口变为高阻态
- WKUP引脚上升沿、RTC闹钟、NRST引脚复位、IWDG看门狗复位,退出待机模式。
模式选择
标准库函数使用模板
函数使用模板
// 睡眠模式,中断唤醒
void Sleep_Wakeup() {while(1) {/* do something */__WFI(); //中断唤醒}
}// 停机模式,EXTI中断唤醒
void Stop_Wakeup() {RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);while(1) {/* do something */PWR_EnterSTOPMode(PWR_Regulartor_ON, PWR_STOPEntry_WFI);SystemInit();}
}// 待机模式,实时时钟闹钟唤醒
void Standby_RTC() {RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);uint32_t Alarm = RTC_GetCounter() + 10RTC_SetAlarm(Alarm);while(1) {/* do something *//* 将外设模块一并关闭*/PWR_EnterSTANDBYMode();}
}
使能函数
// 使能后备区域的访问
void PWR_BackupAccessCmd(FunctionalState NewState);// PVD使能
void PWR_PVDCmd(FunctionalState NewState);// 配置PVD电压阈值
void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel);// 使能WakeUp引脚(无需再GPIO初始化)
void PWR_WakeUpPinCmd(FunctionalState NewState);// 进入停机模式
void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry);// 进入待机模式
void PWR_EnterSTANDBYMode(void);
PWR标志位
// 获取标志位
FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG);// 清除标志位
void PWR_ClearFlag(uint32_t PWR_FLAG);
标志位
// 获取标志位
FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG);// 清除标志位
void PWR_ClearFlag(uint32_t PWR_FLAG);
------ BY Flier
2023.9.10
Reference:江协科技、《stm32f10x用户手册》、《stm32库开发实战指南教程》
这篇关于PWR外设的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!