当前位置: 首页 > news >正文

第二十六天-待机唤醒实验

一、待机唤醒概念

二、低功耗模式

三、待机模式

四、相关寄存器和库函数

1、寄存器

2、库函数

五、待机唤醒实验

1、实验要求

2、实验详细代码

1、wkup.c

#include "wkup.h"
#include "key.h"
#include "delay.h"void WKUP_Init()
{//使能GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);GPIO_InitTypeDef GPIO_InitTypeDefStruct;GPIO_InitTypeDefStruct.GPIO_Mode = GPIO_Mode_IPD;GPIO_InitTypeDefStruct.GPIO_Pin = GPIO_Pin_0;GPIO_InitTypeDefStruct.GPIO_Speed = GPIO_Speed_50MHz;//初始化GPIOA0 下拉输入GPIO_Init(GPIOA,&GPIO_InitTypeDefStruct);//设置GPIOA0 外中断GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_Pin_0);//设置外中断EXTI_InitTypeDef EXTI_InitStruct;EXTI_InitStruct.EXTI_Line = EXTI_Line0;EXTI_InitStruct.EXTI_LineCmd = ENABLE;EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;EXTI_Init(&EXTI_InitStruct);//设置外中断NVIC_InitTypeDef NVIC_InitStruct;NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2;NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;NVIC_Init(&NVIC_InitStruct);//判断是否长按 A0 3sif(isKey() == 0)EnterSTAND();}
//判断是否连按3s
u8 isKey()
{u8 t = 0;while(1){if(IN3 == SET){t++;delay_ms(30);if(t == 100)return 1;}elsereturn 0;}
}void EnterSTAND()
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);PWR_WakeUpPinCmd(ENABLE);PWR_EnterSTANDBYMode();
}void EXTI0_IRQHandler()
{EXTI_ClearITPendingBit(EXTI_Line0);if(isKey()){EnterSTAND();}
}

2、main.c

 int main(void){	delay_init();uart_init(115200);LED_Init();printf("已经解除\r\n");NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);WKUP_Init();RTC_Init();LCD_Init(); LCD_ShowString(60,50,200,24,24,"HELLO WORLD!");LCD_ShowString(60,120,200,24,24,"    -  -  ");LCD_ShowString(60,174,200,24,24,"  :  :  ");while(1){LED0 =! LED0;delay_ms(1000);}}

3、代码逻辑

待机状态->按下键,解除待机->从main开始重新执行,所有寄存器全部复位,需重新初始化>若按键长达3s,则不会再次进入待机状态,进入正常状态,此时lcd亮;

正常状态->按下键,触发外部中断->若按键长达3s->计入待机状态,lcd屏幕熄灭

4、关键问题

①当在待机状态按下wake按键时,待机状态解除。此时是否会触发外部中断,从而影响程序正常执行?

不会的。因为,我们按键的开始时间点是从main重新开始执行的那个时候。当重新初始化中断,并使能后,此时信号只是处于高电平,而中断的触发条件是上升沿,因此中断不会被触发。

http://www.dtcms.com/a/358380.html

相关文章:

  • 【GaussDB】在逻辑复制中剔除指定用户的事务
  • Java动态代理
  • Redis-基数统计、位图、位域、流
  • ⚡ Linux find 命令参数详解
  • 【开题答辩全过程】以 云智课为例,包含答辩的问题和答案
  • SQL语言增删改查之C与R
  • 05MySQL多表查询全解析
  • Flutter 跨平台开发环境搭建指南
  • Spring Boot 后端接收多个文件的方法
  • Android 权限申请现代化指南
  • 机器学习中的欠拟合与过拟合
  • SC税务 登录滑块 分析
  • 桌面GIS软件FlatGeobuf转Shapefile代码分享
  • Coze源码分析-API授权-添加新令牌-后端源码
  • 项目管理常用的方法有哪些
  • 国标调查:引领汽车消费市场健康发展的理性指南
  • 第2节:项目前期准备
  • Raycast 使用指南:解锁 macOS 生产力新高度
  • opencv实现轮廓绘制和选择
  • Intellij IDEA社区版(下载安装)
  • 学习python第15天
  • 网络编程(4)
  • 项目管理方法全流程解析
  • 【前端教程】HTML 基础界面开发
  • destoon8.0根据模块生成html地图
  • 星链调查(SOS)线上问卷调查服务:全流程专业闭环
  • Python自定义函数形式参中的*args、**kwargs、*和/
  • 学习:uniapp全栈微信小程序vue3后台(7)
  • AI生成思维导图和AI生成Excel公式
  • Dify1.8.0最新版本安装教程:Ubuntu25.04系统本地化安装部署Dify详细教程