21ic问答首页 - StandBY待机模式,WakeUp失效,只能通过NRTST复位
StandBY待机模式,WakeUp失效,只能通过NRTST复位
MOUN2023-05-03
不知道怎么添加本地图片#include "stm32f10x.h"
#include "stdint.h"
#include "LED.h"
#include "KEY.h"
#include "stdio.h"
#include "OLED.h"
#include "PRINTF.h"//虽然名字是是打印,但是重定向到OLED失败了,这里是待机初始化有关的函数
static void Delay(__IO uint32_t nCount);
//进入休眠:熄灯,并显示“StandBy”
//退出休眠:亮灯,并显示“welcome to use”
int main(void)
{
//初始化复位按键,这是特殊的,尽管在待机模式下不识别外部中断?擦擦擦啊
WakeUp_Init();
//屏幕初始化
OLED_Init();
//灯泡引脚初始化
LED_GPIO_Config();
//初始化进入待机按键,这里长按进入待机,引脚是PA6
Key_GPIO_Config();
OLED_ShowString(1,1,"WelCome to use");
//延时,让屏幕显示久一点让你看到
Delay(0x3fffff);
//从待机唤醒后,除了电源控制/状态寄存器(PWR_CSR),所有寄存器被复位
//检查WakeUp标志位,如果是1,就代表是从待机模式下唤醒
if(PWR_GetFlagStatus(PWR_FLAG_WU) == SET)
{
OLED_ShowString(1,1,"From StandBy");
Delay(0x3fffff);
}
else
{
OLED_ShowString(1,1,"Not From StandBy");
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();
}
}
}
static void Delay(__IO uint32_t nCount)
{
for (; nCount!=0;nCount--);
}
###NextPage[title=EnterStandBy()函数,WakeUp_Init()函数]###
#include "PRINTF.h"
void WakeUp_Init(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR ,ENABLE);
/*打开WakeUp唤醒功能*/
PWR_WakeUpPinCmd(ENABLE);
}
void Enter_StandBy(void)
{
/*清除唤醒标志位*/
PWR_ClearFlag (PWR_FLAG_WU);
//清除待机标志位
PWR_ClearFlag(PWR_FLAG_SB);
/*进入待机模式*/
PWR_EnterSTANDBYMode();
}
#include "stdint.h"
#include "LED.h"
#include "KEY.h"
#include "stdio.h"
#include "OLED.h"
#include "PRINTF.h"//虽然名字是是打印,但是重定向到OLED失败了,这里是待机初始化有关的函数
static void Delay(__IO uint32_t nCount);
//进入休眠:熄灯,并显示“StandBy”
//退出休眠:亮灯,并显示“welcome to use”
int main(void)
{
//初始化复位按键,这是特殊的,尽管在待机模式下不识别外部中断?擦擦擦啊
WakeUp_Init();
//屏幕初始化
OLED_Init();
//灯泡引脚初始化
LED_GPIO_Config();
//初始化进入待机按键,这里长按进入待机,引脚是PA6
Key_GPIO_Config();
OLED_ShowString(1,1,"WelCome to use");
//延时,让屏幕显示久一点让你看到
Delay(0x3fffff);
//从待机唤醒后,除了电源控制/状态寄存器(PWR_CSR),所有寄存器被复位
//检查WakeUp标志位,如果是1,就代表是从待机模式下唤醒
if(PWR_GetFlagStatus(PWR_FLAG_WU) == SET)
{
OLED_ShowString(1,1,"From StandBy");
Delay(0x3fffff);
}
else
{
OLED_ShowString(1,1,"Not From StandBy");
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();
}
}
}
static void Delay(__IO uint32_t nCount)
{
for (; nCount!=0;nCount--);
}
###NextPage[title=EnterStandBy()函数,WakeUp_Init()函数]###
#include "PRINTF.h"
void WakeUp_Init(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR ,ENABLE);
/*打开WakeUp唤醒功能*/
PWR_WakeUpPinCmd(ENABLE);
}
void Enter_StandBy(void)
{
/*清除唤醒标志位*/
PWR_ClearFlag (PWR_FLAG_WU);
//清除待机标志位
PWR_ClearFlag(PWR_FLAG_SB);
/*进入待机模式*/
PWR_EnterSTANDBYMode();
}
您需要登录后才可以回复 登录 | 注册