STM32标准库开发—睡眠/停机/待机模式配置

三种模式对照表

在这里插入图片描述

串口中断唤醒睡眠模式

要想进入睡眠模式只需要输入WFI指令即可进入,每当中断一次,程序便会从暂停处继续执行,直到再次进入睡眠模式

OLED_Init();
OLED_ShowString(1, 1, "RxData:");

Serial_Init();
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();
}
外部中断唤醒停止模式

想要进入停止模式,必须先使能PWR时钟,在PWR寄存器中配置选择低功耗模式和触发中断源选择

OLED_Init();
CountSensor_Init();

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

OLED_ShowString(1, 1, "Count:");

while (1)
{
	OLED_ShowNum(1, 7, CountSensor_Get(), 5);
	
	OLED_ShowString(2, 1, "Running");
	Delay_ms(100);
	OLED_ShowString(2, 1, "       ");
	Delay_ms(100);
	
	PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);
	SystemInit();
}

注意:每次唤醒停止模式后,主频都会变成8MHZ

RTC时钟中断唤醒待机模式
OLED_Init();
MyRTC_Init();

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

OLED_ShowString(1, 1, "CNT :");
OLED_ShowString(2, 1, "ALR :");
OLED_ShowString(3, 1, "ALRF:");

PWR_WakeUpPinCmd(ENABLE);

uint32_t Alarm = RTC_GetCounter() + 10;
RTC_SetAlarm(Alarm);
OLED_ShowNum(2, 6, Alarm, 10);

while (1)
{
	OLED_ShowNum(1, 6, RTC_GetCounter(), 10);
	OLED_ShowNum(3, 6, RTC_GetFlagStatus(RTC_FLAG_ALR), 1);
	
	OLED_ShowString(4, 1, "Running");
	Delay_ms(100);
	OLED_ShowString(4, 1, "       ");
	Delay_ms(100);
	
	OLED_ShowString(4, 9, "STANDBY");
	Delay_ms(1000);
	OLED_ShowString(4, 9, "       ");
	Delay_ms(100);
	
	OLED_Clear();
	
	PWR_EnterSTANDBYMode();
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值