STM32——待机唤醒

STM32F4 提供了 3 种低功耗模式,以达到不同层次的降低功耗的目的,这三种模式如下:
(1)睡眠模式( CM4 内核停止工作,外设仍在运行)
(2)停止模式(所有时钟都停止)
(3)待机模式( 1.2 V 域断电)
这三种模式所需的功耗是逐级递减,也就是说待机模式功耗是最低的。三种低功耗模式汇总表如图所示
在这里插入图片描述
(1)待机模式
在睡眠模式中,仅关闭了内核时钟,内核停止运行,但其片上外设, CM4 核心的外设全都照常运行。在停止模式中,进一步关闭了其它所有的时钟,于是所有的外设都停止了工作,但由于其 1.2V 区域的部分电源没有关闭,还保留了内核的寄存器、内存的信息,所以从停止模式唤醒,并重新开启时钟后,还可以从上次停止处继续执行代码。在待机模式中,它除了关闭所有的时钟,还把 1.2V 区域的电源也完全关闭了,也就是说,从待机模式唤醒后,由于没有之前代码的运行记录,只能对芯片复位,重新检测BOOT条件,从头开始执行程序。
在这里插入图片描述
从待机模式唤醒后,程序将按照复位(启动引脚采样、复位向量已获取等)后的方式重新执行。电源控制/状态寄存器(PWR_CSR)将会指示内核由待机状态退出。
在进入待机模式后,除了复位引脚、 RTC_AF1 引脚( PC13)(如果针对入侵、时间戳、 RTC闹钟输出或 RTC 时钟校准输出进行了配置)和 WK_UP( PA0)(如果使能)等引脚外,其他所有 IO 引脚都将处于高阻态。

待机模式配置步骤
(1)使能电源时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);

(2)设置WK_UP引脚为唤醒源

PWR_WakeUpPinCmd(ENABLE);

(3)进入待机模式

PWR_EnterSTANDBYMode();//进入待机模式
PWR_ClearFlag(PWR_FLAG_WU);//清除Wake-up 标志      

系统运行时D1指示灯闪烁,5秒后进入待机模式,D1指示灯熄灭,同时串口printf输出相关提示信息,通过K_UP按键实现唤醒。
wkup.c

#include "wkup.h"


void Enter_Standby_Mode(void)     //进入待机模式
{
				RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE); //使能电源时钟
//使用RTC时需要禁止RTC	
//				RTC_ITConfig(RTC_IT_TS|RTC_IT_WUT|RTC_IT_ALRB|RTC_IT_ALRA,DISABLE); //禁止RTC中断干扰
//				RTC_ClearITPendingBit(RTC_IT_TS|RTC_IT_WUT|RTC_IT_ALRB|RTC_IT_ALRA); // 清除中断标志

				
	
				PWR_WakeUpPinCmd(ENABLE);  //设置WK_UP引脚为唤醒源 与key_UP共用管教,所以高电平可以用按键按下产生
	
				PWR_ClearFlag(PWR_FLAG_WU);//清除Wake-up 标志 

				PWR_EnterSTANDBYMode();//进入待机模式
}



main.c

#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "usart.h"
#include "input.h"
#include "touch.h"
#include "rng.h"
#include "wkup.h"

int main()
{
	u8 i=0;
	
	
	SysTick_Init(168);
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组
	LED_Init();
	USART1_Init(9600);
  
	
	
	while(1)
	{
    printf("time:5s\n\r");
		led1 = 0;
		myDelay_ms(1000);
		
		printf("time:4s\n\r");
		led1 = 1;
		myDelay_ms(1000);
		
		printf("time:3s\n\r");
		led1 = 0;
		myDelay_ms(1000);
		
		printf("time:2s\n\r");
		led1 = 1;
		myDelay_ms(1000);
		
		printf("time:1s\n\r");
		led1 = 0;
		myDelay_ms(1000);
		
		printf("系统进入待机模式\n\r");
		Enter_Standby_Mode();     //进入待机模式
  }

}	 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值