当前位置: 首页 > 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.xdnf.cn/news/1401769.html

相关文章:

  • 信息系统架构
  • v-model ,在 vue3和 vue2中的区别
  • Linux(1)|入门的开始:Linux基本指令
  • 认识Redis
  • IDM手机端,速度能提高6倍!
  • CPU的MBR寄存器和MDR寄存器
  • 联合体和枚举——嵌入式学习笔记
  • Linux IO复用
  • 优选算法:二分查找
  • 数据库攻略:“CMU 15-445”Project0:C++ Primer(2024 Fall)
  • 《Java反射与动态代理:从原理到实践》
  • SpringBoot整合Actuator实现健康检查
  • MIT 6.5840 (Spring, 2024) 通关指南——Lab 1: MapReduce
  • GitHub 热榜项目 - 日榜(2025-08-30)
  • 基于Ubuntu本地GitLab 搭建 Git 服务器
  • 解构机器学习:如何从零开始设计一个学习系统?
  • 【LeetCode】大厂面试算法真题回忆(121) —— 经典屏保
  • 并发编程——09 CountDownLatch源码分析
  • Spring Boot 后端接收多个文件的方法
  • 项目管理常用的方法有哪些
  • 三菱 PLC的中断指令/中断指针
  • 构建现代化的“历史上的今天“网站:从API到精美UI的全栈实践
  • 北方苍鹰优化算法优化的最小二乘支持向量机NGO-LSSVM多输入多输出回归预测【MATLAB】
  • 2025年06月 Scratch 图形化(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • Robolectric如何启动一个Activity
  • 倾斜摄影是选择RGB图像还是多光谱影响进行操作?
  • Transformer:从入门到精通
  • 嵌入式Linux驱动开发:蜂鸣器驱动
  • stack queue的实现 deque的底层结构 priority_queue的实现
  • 【Java实战⑦】从入门到精通:Java异常处理实战指南