-
StandBY待机模式,WakeUp失效,只能通过NRTST复位
不知道怎么添加本地图片#include"stm32f10x.h"#include"stdint.h"#include"LED.h"#include"KEY.h"#include"stdio.h"#include"OLED.h"#include"PRINTF.h"//虽然名字是是打印,但是重定向到OLED失败了,这里是待机初始化有关的函数staticvoidDelay(__IOuint32_tnCount);//进入休眠:熄灯,并显示“StandBy”//退出休眠:亮灯,并显示“welcometouse”intmain(void){//初始化复位按键,这是特殊的,尽管在待机模式下不识别外部中断?擦擦擦啊WakeUp_Init();//屏幕初始化OLED_Init();//灯泡引脚初始化LED_GPIO_Config();//初始化进入待机按键,这里长按进入待机,引脚是PA6Key_GPIO_Config();OLED_ShowString(1,1,"WelCometouse");//延时,让屏幕显示久一点让你看到Delay(0x3fffff);//从待机唤醒后,除了电源控制/状态寄存器(PWR_CSR),所有寄存器被复位//检查WakeUp标志位,如果是1,就代表是从待机模式下唤醒if(PWR_GetFlagStatus(PWR_FLAG_WU)==SET){OLED_ShowString(1,1,"FromStandBy");Delay(0x3fffff);}else{OLED_ShowString(1,1,"NotFromStandBy");Delay(0x3fffff);}while(1){OLED_ShowString(1,1,"Working");LED_H(LED_GPIO_PORT,LED_GPIO_PIN);//长按进入待机状态if(KEY2_LongPress()){OLED_ShowString(1,1,"StandBy");Delay(0x5fffff);/*进入待机模式,清除WakeUp标志位也是在这里*/Enter_StandBy();}}}staticvoidDelay(__IOuint32_tnCount){for(;nCount!=0;nCount--);}###NextPage[title=EnterStandBy()函数,WakeUp_Init()函数]####include"PRINTF.h"voidWakeUp_Init(void){RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);/*打开WakeUp唤醒功能*/PWR_WakeUpPinCmd(ENABLE);}voidEnter_StandBy(void){/*清除唤醒标志位*/PWR_ClearFlag(PWR_FLAG_WU);//清除待机标志位PWR_ClearFlag(PWR_FLAG_SB);/*进入待机模式*/PWR_EnterSTANDBYMode();}
2023-05-03 0