STM32低功耗模式:
- 睡眠模式:CM3内核停止工作;外设运行
- 停机模式:时钟都停止
- 待机模式:1.8v内核电源关闭;功耗最低
(配置了RTC时钟不是以下步骤看数据手册)
代码流程:
- 使能电源时钟
- 设置WK_UP脚为唤醒源
- 进入待机模式
代码如下
#include "wkup.h"
/*******************************************************************************
* 函 数 名 : Enter_Standby_Mode
* 函数功能 : 进入待机模式
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Enter_Standby_Mode(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//使能PWR外设时钟
PWR_ClearFlag(PWR_FLAG_WU);//清除Wake-up 标志
PWR_WakeUpPinCmd(ENABLE);//使能唤醒管脚 使能或者失能唤醒管脚功能
PWR_EnterSTANDBYMode();//进入待机模式
}
主函数代码(一定要在初始前增加延时只有在延时期间才能烧录代码)
#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "usart.h"
#include "wkup.h"
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
int main()
{
SysTick_Init(72);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组 分2组
LED_Init();
USART1_Init(115200);
while(1)
{
printf("time: 5\r\n");
LED1=0;
delay_ms(1000); //隔1秒显示计数
printf("time: 4\r\n");
LED1=1;
delay_ms(1000);
printf("time: 3\r\n");
LED1=0;
delay_ms(1000);
printf("time: 2\r\n");
LED1=1;
delay_ms(1000);
printf("time: 1\r\n");
LED1=0;
delay_ms(1000);
printf("进入系统待机模式\r\n");
Enter_Standby_Mode();
}
}