1.STM32待机模式介绍:
(1)STM32低功耗模式介绍:
STM32提供了3种低功耗模式,以达到不同层次的降低功耗的目的,三种模式如下所示:
- 睡眠模式(CM内核停止工作,外设仍在运行);
- 停止模式(所有时钟都停止);
- 待机模式(1.8V内核电源关闭);
(2)待机模式:
在待机模式条件下,除了PC13、PA0的其他引脚都设置为高阻态,因此在程序中要设置好,避免一直循环进入待机模式,否则无法对软件进行更新;
2.待机模式配置步骤:
电源管理相关库函数在:stm32f10x_pwr.c和stm32f10x_pwr.h文件中;
- 使能电源时钟:RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
- 设置WK_UP引脚为唤醒源:PWR_WakeUpPinCmd(ENABLE);
- 进入待机模式:PWR_EnterSTANDBYMode()、PWR_ClearFlag(PWR_FLAG_WU);
3.待机唤醒实验:
实现功能:系统运行时LED0指示灯闪烁,6秒后进入待机模式。LED0指示灯熄灭,同时串口printf输出相关提示信息,通过KEY_UP按键实现唤醒,
(1)主函数:
#include "delay.h"
#include "led.h"
#include "usart1.h"
#include "wkup.h"
int main(){
u8 i=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置分组
delay_init(); //延时初始化
LED_Init();
usart1_Init(9600); //串口通信初始化
while(1){
for(i=1;i<=10;i++)
{
printf("距离进入待机模式还剩:%d s\r\n",11-i);
delay_ms(1000);
LED0=!LED0;
if(i==10)
{
printf("进入待机模式中...\r\n");
printf("\r\n");
Enter_StandByMode(); //待机模式->进入待机模式后,程序不会再执行,一直处于待机模式
}
}
i++;
if(i%20==0)
{
LED0=!LED0;
}
delay_ms(20);
}
}
(2)头文件:
#ifndef __WKUP_H
#define __WKUP_H
void Enter_StandByMode(void); //待机模式初始化
#endif
(3)待机唤醒功能函数:
#include "stm32f10x.h"
#include "wkup.h"
/*
功能:待机模式初始化
变量:无
返回值:无
*/
void Enter_StandByMode(void)
{
//1.使能电源时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
//2.设置WK_UP引脚为唤醒源
PWR_WakeUpPinCmd(ENABLE);
//3.清除标志
PWR_ClearFlag(PWR_FLAG_WU);
//4.进入待机模式
PWR_EnterSTANDBYMode();
}