STM32快速复习(十)PWR电源控制

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

像汽车钥匙,遥控器,电子密码锁等以及含有定时开关机等功能的电路,都需要做到不工作时进入省电模式来减少电池的消耗。为此,STM32推出了可以低功耗运行的电源控制模块。PWR;

PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能


一、PWR是什么?PWR的电路?PWR的模式?

一、PWR简介

1、PWR(Power Control)电源控制

(1)PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能

(2)可编程电压监测器(PVD)可以监控VDD电源电压,当VDD下降到PVD阀值以下或上升到PVD阀值之上时,PVD会触发中断,用于执行紧急关闭任务

(3)低功耗模式包括睡眠模式(Sleep)、停机模式(Stop)和待机模式(Standby),可在系统空闲时,降低STM32的功耗,延长设备使用时间



PVD是来检测2.9V~2.2V左右的电压,可以在这个范围内设置一个警告线,如果低于则触发警告。可以进入中断做一些事情。

上电掉电复位则是提供一个最低的阈值,如果低于这个阈值则复位。

PWR的模式分为睡眠模式,停止模式和待机模式;

睡眠模式

(1)执行完WFI/WFE指令后,STM32进入睡眠模式,程序暂停运行,唤醒后程序从暂停的地方继续运行

(2)SLEEPONEXIT位决定STM32执行完WFI或WFE后,是立刻进入睡眠,还是等STM32从最低优先级的中断处理程序中退出时进入睡眠

(3)在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态

(4)WFI指令进入睡眠模式,可被任意一个NVIC响应的中断唤醒

(5)WFE指令进入睡眠模式,可被唤醒事件唤醒

停止模式

(1)执行完WFI/WFE指令后,STM32进入停止模式,程序暂停运行,唤醒后程序从暂停的地方继续运行

(2)1.8V供电区域的所有时钟都被停止,PLL、HSI和HSE被禁止,SRAM和寄存器内容被保留下来

(3)在停止模式下,所有的I/O引脚都保持它们在运行模式时的状态

(4)当一个中断或唤醒事件导致退出停止模式时,HSI被选为系统时钟(8MHz)

(5)当电压调节器处于低功耗模式下,系统从停止模式退出时,会有一段额外的启动延时

(6)WFI指令进入停止模式,可被任意一个EXTI中断唤醒

(7)WFE指令进入停止模式,可被任意一个EXTI事件唤醒

待机模式

(1)执行完WFI/WFE指令后,STM32进入待机模式,唤醒后程序从头开始运行

(2)整个1.8V供电区域被断电,PLL、HSI和HSE也被断电,SRAM和寄存器内容丢失,只有备份的寄存器和待机电路维持供电

(3)在待机模式下,所有的I/O引脚变为高阻态(浮空输入)

(4)WKUP引脚的上升沿、RTC闹钟事件的上升沿、NRST引脚上外部复位、IWDG复位退出待机模式

二、库函数


TIPS: 修改系统主频的方法

修改主频可以有效的降低功耗。并且在停机模式下唤醒 ,也需要修改主频到72MHZ (停机模式下唤醒,系统主频由72MHZ降低至36MHZ,需要重新修改主频,否则外设的时序会出错误,运行时间会变长)

这个需要去system_stm32f10x.c和system_stm32f10x.h 中查看学习

system_stm32f10x.c中可调用的函数

在system_stm32f10x.c 文件中有两个外部可调用的函数和一个外部可调用的变量.(可以在头文件中看到。)

两个函数是SystemInit()和SystemCoreClockUpdate()

一个变量是SystemCoreClock

SystemInit() 是用来配置时钟树的,他是在执行main函数之前,在启动文件中调用的。

SystemCoreClock 表示主频频率的值。如果我们要显示当前频率就可以直接调用显示

SystemCoreClockUpdate() 更新上边的SystemCoreClock 的值。

7.2 system_stm32f10x.c中的宏定义

解除对应的注释,来选择想要的系统主频(带有钥匙的文件无法修改,需要取消文件的只读属性)

这个if和 lese的意思是:只要你不是VL(超值系列)。就可以配置那么多的主频(lese下边的)


1.标准库函数

代码如下:

c 复制代码
void PWR_DeInit(void);恢复缺省配置
void PWR_BackupAccessCmd(FunctionalState NewState);使能后备区域的访问
void PWR_PVDCmd(FunctionalState NewState);配置PVD阈值电压
void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel);使能PVD功能
void PWR_WakeUpPinCmd(FunctionalState NewState);使能位于PA0位置的WKUP引脚。(配合待机模式使用)
void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry);进入停止模式
指定电压调节器在停止模式中的状态、使用WFI或WFI指令进入
void PWR_EnterSTANDBYMode(void);进入待机模式
使用WFI或WFI指令进入
FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG);获取标志位
void PWR_ClearFlag(uint32_t PWR_FLAG);清除标志位                       

2.示例代码--睡眠模式&串口发送和接收

代码如下(示例):

c 复制代码
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Serial.h"
 
uint8_t RxData;
 
int main(void)
{
	OLED_Init();
	Serial_Init();
	
	OLED_ShowString(1,1,"RxData:");
 
	while(1)
	{
		if(Serial_GetRxFlag() == 1)
		{
			RxData = Serial_GetRxData();
			Serial_SendByte(RxData);
			OLED_ShowHexNum(1,8,RxData,2);
		}
		OLED_ShowString(2,1,"Running");
		Delay_ms(100);
		OLED_ShowString(2,1,"       ");
		Delay_ms(100);
		
		__WFI();//中断唤醒
		
	}
}

睡眠模式下串口发送和接收

在主循环最后执行WFI,CPU会立刻睡眠,程序停在WFI指令这里,发送数据,USART外设收到数据,产生中断,唤醒CPU,程序在暂停的地方继续运行,先进入中断再回到主循环

Running闪烁一次,程序在收到数据之后,可以唤醒工作一次,CPU在空闲时睡眠,节约用电

注:再次下载程序显示下载不成功,所以按住复位键,再按下载键,最后松开复位键才可以下载成功


总结

待机模式只能由WKUP引脚的上升沿、RTC闹钟事件的上升沿、NRST引脚上外部复位、IWDG复位来退出待机模式。

在待机模式恢复后,会重头开始执行命令。所以不需要配置时钟了。

在待机模式下, 1.8V的区域的时钟关闭,电压调节器也关闭。这会使除了备份区域外的所有寄存器清除数据,并且IO口对外呈现为高阻态。

在进入待机模式之前,一般都需要把所有的外设 都关闭,比如屏幕、电机等等。 否则就无法极度省电

待机模式会重头开始执行命令,所以不需要再配置时钟了。

待机模式烧录代码可以按住复位再烧录 (我这里不行,我会断电重上电,在未进入待机模式前开始烧录代码)

测试WKUP引脚时,只需要函数:PWR_WakeUpPinCmd(ENABLE); 就可以了。程序会自动帮我们把WKUP(PA0)引脚设置为下拉输入的配置,不需要GPIO初始化。

TIPS: 待机等模式无法下载程序,因为烧录引脚被关闭。方法。一边按复位引脚,一边按KEIL5中烧录按钮,可从新烧录。

相关推荐
llilian_161 天前
总线授时卡 CPCI总线授时卡的工作原理及应用场景介绍 CPCI总线校时卡
运维·单片机·其他·自动化
禾仔仔1 天前
USB MSC从理论到实践(模拟U盘为例)——从零开始学习USB2.0协议(六)
嵌入式硬件·mcu·计算机外设
The Electronic Cat1 天前
树莓派使用串口启动死机
单片机·嵌入式硬件·树莓派
先知后行。1 天前
常见元器件
单片机·嵌入式硬件
恒锐丰小吕1 天前
屹晶微 EG2302 600V耐压、低压启动、带SD关断功能的高性价比半桥栅极驱动器技术解析
嵌入式硬件·硬件工程
Dillon Dong1 天前
按位或(|=)的核心魔力:用宏定义优雅管理嵌入式故障字
c语言·stm32
Free丶Chan1 天前
dsPIC系列-1:dsPIC33点灯 [I/O、RCC、定时器]
单片机·嵌入式硬件
v先v关v住v获v取1 天前
塔式立体车库5张cad+设计说明书+三维图
科技·单片机·51单片机
恒锐丰小吕1 天前
屹晶微 EG2106D 600V耐压、半桥MOS/IGBT驱动芯片技术解析
嵌入式硬件·硬件工程