1、 运行结果
2、源代码
(1)、目录结构
(2)、主函数
#include "MyLed.h"
#include "delayms.h"
#include "MyUsart.h"
#include "wakeup.h"
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数入口
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
int main(void) {
LED_Init();
delay_ms(50);
init__uart1(9600);
delay_ms(50);
NVIC_Config();
delay_ms(50);
printf("测试进入待机模式\r\n");
delay_ms(100);
while (1) {
printf("延时 5s \r\n");
GPIO_ResetBits(LEDPORT, LED1);
delay_ms(10000);
printf("延时 4s \r\n");
GPIO_SetBits(LEDPORT, LED1);
delay_ms(10000);
printf("延时 3s \r\n");
GPIO_ResetBits(LEDPORT, LED1);
delay_ms(10000);
printf("延时 2s \r\n");
GPIO_SetBits(LEDPORT, LED1);
delay_ms(10000);
printf("延时 1s \r\n");
GPIO_ResetBits(LEDPORT, LED1);
delay_ms(10000);
printf("进入待机模式 \r\n");
Enter_Standby_Mode(); //待机模式函数入口
}
}
(3)、wake文件
wake.h
#ifndef __WAKE__H
#define __WAKE__H
void Enter_Standby_Mode(void);
#endif
wake.c
#include "wakeup.h"
#include "stm32f10x_pwr.h"
/*******************************************************************************
* 函 数 名 : Enter_Standby_Mode
* 函数功能 : 待机模式函数入口
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Enter_Standby_Mode()
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
//设置唤醒源
PWR_WakeUpPinCmd(ENABLE);
//清除wake-up标志位
PWR_ClearFlag(PWR_FLAG_WU);
//进入待机模式
PWR_EnterSTANDBYMode();
}
(4)、退出待机模式
A0引脚接高电平即可唤醒。