进入低功耗和唤醒
休眠模式
进入休眠模式
如果使用 WFI 指令进入睡眠模式,则嵌套向量中断控制器 (NVIC) 确认的任意外设中断都会
将器件从睡眠模式唤醒。
如果使用 WFE 指令进入睡眠模式,MCU 将在有事件发生时立即退出睡眠模式。唤醒事件可
通过以下方式产生:使能外设中断,但是不用NVIC。在内核系统控制寄存器SEVONPEND=1;SLEEPONEXIT = 0;配置外部中断为事件模式;

退出休眠
wfi进入休眠:任意中断退出休眠;
WFE进入休眠如下10.2.3
10.2.3 唤醒事件管理
STM32F4xx 能够处理外部或内部事件来唤醒内核 (WFE)。唤醒事件可通过以下方式产生:
● 在外设的控制寄存器使能一个中断,但不在 NVIC 中使能,同时使能 Cortex™-M4F 系统
控制寄存器中的 SEVONPEND 位。当 MCU 从 WFE 恢复时,需要清除相应外设的中
断挂起位和外设 NVIC 中断通道挂起位(在 NVIC 中断清除挂起寄存器中)。
● 配置一个外部或内部 EXTI 线为事件模式。当 CPU 从 WFE 恢复时,因为对应事件线的
挂起位没有被置位,不必清除相应外设的中断挂起位或 NVIC 中断通道挂起位。
M4内核系统控制寄存器(SCR)
在m4内核的SCB系统控制块中

需要的在2和3位
休眠模式程序
#include"wkup.h"#define WKUP_KD PAin(0) //PA0 检测是否外部WK_UP按键按下void wkup_init()
{GPIO_InitTypeDef GPIO_InitStruct;EXTI_InitTypeDef EXTI_InitStruct;NVIC_InitTypeDef NVIC_InitStruct;RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA , ENABLE);RCC_APB2PeriphClockCmd( RCC_APB2Periph_SYSCFG , ENABLE);//外部中断需要sysCFG时钟GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN;//外部中断只能输入模式,没有复用模式;GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_DOWN;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_100MHz;GPIO_Init(GPIOA, & GPIO_InitStruct);SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);//库文件sysfg文件的函数,配置A0为外部中断EXTI_InitStruct.EXTI_Line=EXTI_Line0 ;//外部中断EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising;EXTI_InitStruct.EXTI_LineCmd= ENABLE;EXTI_Init( & EXTI_InitStruct);NVIC_InitStruct.NVIC_IRQChannel=EXTI0_IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=3;NVIC_InitStruct.NVIC_IRQChannelSubPriority=3;NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStruct);}void EXTI0_IRQHandler()
{EXTI_ClearITPendingBit( EXTI_Line0 );printf("\r\n 激活88888888888 \r\n");
}
void sys_enter_sleep()
{__WFI();SCB->SCR&=~(3<<1);//SLEEPDEEP SLEEPONEXIT 都等于0}
main
#include "main.h"
#define tmep_len 30
uint8_t temp_buf[tmep_len]={0};void test();
uint8_t *mian_temp;
double time_us;
int main(void)
{ time_struct times;u8 key,flag ,i,n=5; //保存键值long long temp_32=0;static bool cnt;
// delay_init(168); //初始化延时函数LED_Init(); //初始化LED端口 BEEP_Init(); //初始化蜂鸣器端口//KEY_Init(); //初始化与按键连接的硬件接口LED1=!LED1;LED0=!LED0;wkup_init();//配置中断唤醒while(1){ for(i=0;i<20;i++){ temp_32=168*1000*100;while(temp_32--);LED1=!LED1;LED0=!LED0;if(i==5){sys_enter_standby();}}}}
停止模式
停止模式程序
库函数已经包装好
void sys_enter_stop()
{PWR_EnterSTOPMode(PWR_MainRegulator_ON, PWR_STOPEntry_WFI);//库函数}
待机模式
进入待机模式

PWR_EnterSTANDBYMode(void)此库函数中已经存在PDDS和SLEPDEEP位设置;和WFI;
进入待机模式后可以对各个控制位选择如下功能
1、独立的看门狗 (IWDG):
2、实时时钟 (RTC):
3、内部 RC 振荡器 (LSI RC):
4、外部 32.768 kHz 振荡器 (LSE OSC):
退出待机模式
检测到外部复位(NRST 引脚)、IWDG 复位、WKUP 引脚上升沿、RTC 闹钟、入侵事件
或时间戳时间时,微控制器退出待机模式

唤醒时间,就是复位时间;应该不是复位,而是时间长;
待机模式程序
- PWR_EnterSTANDBYMode(void)此库函数中已经存在PDDS和SLEPDEEP位设置;和WFI;
- 在表中多加一个备份RTC和SRAM寄存器 Enables or disables access to the backup domain (RTC registers, RTC * backup data registers and backup SRAM).
- 将电源控制/状态寄存器 (PWR_CSR) 中的 WUF 位清零 选用wakeup引脚外中断唤醒;
#include"wkup.h"#define WKUP_KD PAin(0) //PA0 检测是否外部WK_UP按键按下void wkup_init()
{GPIO_InitTypeDef GPIO_InitStruct;EXTI_InitTypeDef EXTI_InitStruct;NVIC_InitTypeDef NVIC_InitStruct;RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA , ENABLE);RCC_APB2PeriphClockCmd( RCC_APB2Periph_SYSCFG , ENABLE);//外部中断需要sysCFG时钟GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN;//外部中断只能输入模式,没有复用模式;GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_DOWN;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_100MHz;GPIO_Init(GPIOA, & GPIO_InitStruct);SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);//库文件sysfg文件的函数,配置A0为外部中断EXTI_InitStruct.EXTI_Line=EXTI_Line0 ;//外部中断EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising;EXTI_InitStruct.EXTI_LineCmd= ENABLE;EXTI_Init( & EXTI_InitStruct);NVIC_InitStruct.NVIC_IRQChannel=EXTI0_IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=3;NVIC_InitStruct.NVIC_IRQChannelSubPriority=3;NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStruct);}void EXTI0_IRQHandler()
{EXTI_ClearITPendingBit( EXTI_Line0 );printf("\r\n 激活88888888888 \r\n");
}void sys_enter_standby()
{if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)==0){// RCC_AHB1PeriphResetCmd(0X04FF,ENABLE);//复位所有IO口RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//开启电源控制管理时钟,才能操作低功耗PWR_BackupAccessCmd(ENABLE);//备份RTC和SRAMRTC_ClearITPendingBit(RTC_IT_TS|RTC_IT_WUT|RTC_IT_ALRB|RTC_IT_ALRA|RTC_IT_TAMP1|RTC_IT_TAMP2);//禁止RTC中断和清除全部标记RTC_ITConfig(RTC_IT_TS|RTC_IT_WUT|RTC_IT_ALRB|RTC_IT_ALRA|RTC_IT_TAMP, DISABLE); PWR_ClearFlag(PWR_FLAG_WU);//清除wakup 的唤醒标志PWR_WakeUpPinCmd(ENABLE); //使能wake up脚唤醒PWR_EnterSTANDBYMode(); //进入到待机模式}}
main
#include "main.h"
#define tmep_len 30
uint8_t temp_buf[tmep_len]={0};void test();
uint8_t *mian_temp;
double time_us;
int main(void)
{ time_struct times;u8 key,flag ,i,n=5; //保存键值uint32_t temp_32=0;static bool cnt;
// delay_init(168); //初始化延时函数software_times_base_init( 168 );uart_init(115200);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);LED_Init(); //初始化LED端口 BEEP_Init(); //初始化蜂鸣器端口KEY_Init(); //初始化与按键连接的硬件接口LED1=!LED1;LED0=!LED0;wkup_init();while(1){ TimesMs( × );if(times.Delay>3000){times.Delay=0;printf("\r\n 2222222222222222222 \r\n");}key=KEY_Scan(1);if(key==1){ sys_enter_standby();LED1=!LED1;LED0=!LED0;}}}
程序效果:进入待机后不再打印东西;中断唤醒,打印一个已经唤醒标志,并且恢复之前未完成的步骤;
相关文章:
进入低功耗和唤醒
休眠模式 进入休眠模式 如果使用 WFI 指令进入睡眠模式,则嵌套向量中断控制器 (NVIC) 确认的任意外设中断都会 将器件从睡眠模式唤醒。 如果使用 WFE 指令进入睡眠模式,MCU 将在有事件发生时立即退出睡眠模式。唤醒事件可 通过以下方式产生ÿ…...
【多线程】volatile 关键字
volatile 关键字 1. 保证内存可见性2. 禁止指令重排序3. 不保证原子性 1. 保证内存可见性 内存可见性问题: 一个线程针对一个变量进行读取操作,另一个线程针对这个变量进行修改操作, 此时读到的值,不一定是修改后的值,即这个读线…...
【Windows注册表内容详解】
Windows注册表内容详解 第一章节 注册表基础 一、什么是注册表 注册表是windows操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心“数据库”,也可以说是一个非常巨大的树状分层结构的数据库系统。 注册表记录了用户安装在计算机上的软件和每个程…...
大数据Hadoop入门之集群的搭建
hadoop的三种运行模式 本地模式:测试本地的hadoop是否能够运行,用来运行官方的代码。伪分布模式:原先有人拿来测试,目前测试都不用这个模式了。完全分布模式:多台服务器组成分布式环境,生产环境使用 分布式主机文件同步命令 sc…...
华为云云耀云服务器L实例评测|基于云服务器的minio部署手册
华为云云耀云服务器L实例评测|基于云服务器的minio部署手册 【软件安装版本】【集群安装(是)(否)】 版本 创建人 修改人 创建时间 备注 1.0 jz jz 2023.9.2 minio华为云耀服务器 一. 部署规划与架…...
龙智携手Atlassian和JFrog举办线下研讨会,探讨如何提升企业级开发效率与质量
2023年9月8日,龙智将携手Atlassian和JFrog于上海举办线下研讨会,以“大规模开发创新:如何提升企业级开发效率与质量”为主题,邀请龙智高级咨询顾问、Atlassian认证专家叶燕秀,紫龙游戏上海研发中心高级项目管理主管叶凯…...
2023数学建模国赛A题定日镜场的优化设计- 全新思路及代码
背景资料关键信息和要点如下: 定日镜:塔式太阳能光热发电站的基本组件,由纵向转轴和水平转轴组成,用于反射太阳光。 定日镜场:由大量的定日镜组成的阵列。 集热器:位于吸收塔顶端,用于收集太…...
CSS笔记(黑马程序员pink老师前端)圆角边框
圆角边框 border-radius:length; 效果显示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Documen…...
水表电表集中远程抄表系统分析
电表水表远程抄表系统石家庄光大远通电气有限公司主要经营自动抄表,远程抄表,集中抄表,新供应信息,是石家庄光大远通电气有限公司自动远程抄表系统集信号采集、网络通信于一体的高性能抄表装置,该系统以485通讯方式读取水表电表的数据,以MBUS通讯方式读取…...
Android 通知
1. 原生Android通知的几种显示方式: 状态栏的图标:发出通知后,通知会先以图标的形式显示在状态栏中。 抽屉式通知栏:用户可以在状态栏向下滑动以打开抽屉式通知栏,并在其中查看更多详情及对通知执行操作。在应用或用户…...
【Unittest】Requests实现小程序项目接口测试
文章目录 一、搭建接口测试框架二、初始化日志三、定义全局变量四、封装接口五、编写测试用例六、生成测试报告 一、搭建接口测试框架 目录结构如下。 二、初始化日志 在utils.py文件中编写如下如下代码,初始化日志。 # 导入app.py全局变量文件 import app import l…...
Mac 搭建本地服务器
文章目录 一、启动服务器二、添加文件到本地服务三、手机/其他电脑 访问本机服务器 MacOS 自带Apatch 服务器。所以我这里选择Apatch服务器搭建 一、启动服务器 在safari中输入 http://127.0.0.1/ ,如果页面出现 it works,则代表访问成功。启动服务器 …...
区块链基础之编写合约二
一、了解solidity中的关键字。 二、了解solidity中的类型。 三、编写合约 1.这里列出一些solidity中的关键字,有哪些。 pragma 作用:是告知编译器如何处理源代码的通用指令(例如, pragma once )。public 作用&#…...
【前端基础】js 如何判断一个值是数组
在JavaScript中,可使用不同的方法来判断一个值是否是一个数组。以下是一些常用的方法: 使用 Array.isArray() 方法: if (Array.isArray(value)) {// 值是一个数组 } else {// 值不是一个数组 }Array.isArray() 方法是最简单和推荐的方法&…...
Linux之NFS服务器
目录 Linux之NFS服务器 简介 NFS背景介绍 生产应用场景 NFS工作原理 NFS工作流程图 流程 NFS的安装 安装nfs服务 安装rpc服务 启动rpcbind服务同时设置开机自启动 启动nfs服务同时设置开机自启动 NFS的配置文件 主配置文件分析 示例 案例 --- 建立NFS服务器&#…...
ES delete_by_query条件删除的几种方式
es 查询删除的几种方式 1.根据id删除 #根据id删除 POST /indexname/_delete_by_query {"query": { "match": {"id": "100000"}} } 2.根据多个id删除 #根据多个id删除 POST /indexname/_delete_by_query {"query": {"…...
1.springboot 集成elasticsearch组件
1.前置条件已经安装和搭建好了elasticsearch中间件 一:项目中引入elasticsearch相关依赖 我安装的elasticsearch版本是7.10.2 对应依赖的版本保持一致 此处省略springboot 搭建及必要的依赖项 <dependency><groupId>org.elasticsearch.client</group…...
【学习笔记】元学习如何解决计算机视觉少样本学习的问题?
目录 1 计算机视觉少样本学习 2 元学习 3 寻找最优初始参数值方法:MAML 3.1 算法步骤 3.2 代码:使用MAML 和 FO-MAML、任务增强完成Few-shot Classification 4 距离度量方法:Siamese Network,ProtoNet,RN 4.1 孪生网络(Sia…...
【C语言】17-函数-3
1. 链接属性 当组成一个程序的各个源文件分别被编译之后,所有的目标文件以及那些从一个或多个函数库中引用的函数将链接在一起,形成可执行程序。然而,如果相同的标识符出现在几个不同的源文件中时,它们是表示同一个实体,还是表示不同的实体?标识符的链接属性决定如何处理…...
人工智能:为你提供的未来工作岗位
随着科技的快速发展,人工智能(Artificial Intelligence,AI)正逐渐渗透到各个领域。本文探讨一下人工智能可以提供的工作岗位,以期帮助大家更好地了解这个新兴行业的就业前景。 文章目录 1 机器学习工程师2 数据科学家3 自然语言处理工程师4 机器视觉工程…...
大模型Agent面试通关秘籍!小白程序员必备,附收藏版学习资源
大模型Agent面试通关秘籍!小白程序员必备,附收藏版学习资源 本文分享了作者在阿里巴巴大模型Agent应用算法岗面试中的真实经验,涵盖了从一面到三面的高频技术问题及答题思路,包括大模型Agent核心模块解析、微调与提示工程关系、Ag…...
基于MCP协议的elabftw AI助手:安全模型、配置与自动化实践
1. 项目概述:为电子实验笔记本插上AI的翅膀如果你是一名科研人员、实验室管理者,或者像我一样,经常需要和电子实验笔记本(ELN)打交道,那你一定对重复性的数据查询、整理和录入工作感到头疼。每天在浏览器和…...
从用户体验出发:手把手教你用uniapp的showLoading/showToast/showModal设计友好交互
从用户体验出发:手把手教你用uniapp的showLoading/showToast/showModal设计友好交互 在移动应用开发中,交互设计的好坏直接影响用户留存率。数据显示,超过60%的用户会因为糟糕的交互体验而卸载应用。作为开发者,我们不仅要关注功能…...
MCP协议实战:构建AI智能体任务管理服务器与二次开发指南
1. 项目概述:一个为AI智能体“开眼”的MCP服务器最近在折腾AI智能体(Agent)开发的朋友,估计都绕不开一个词:MCP。全称是Model Context Protocol,你可以把它理解为给大模型(比如Claude、GPT-4&am…...
Git Conflict Resolution
1. 这篇文章解决什么问题? Git 冲突不是异常情况,而是多人协作和分支开发里的正常现象。 常见问题包括: 1. 为什么会产生冲突? 2. 冲突文件里的 <<<<<<<、、>>>>>>> 是什么?…...
Nodejs后端服务如何稳定调用Claude并避免封号风险
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Nodejs后端服务如何稳定调用Claude并避免封号风险 1. 后端集成Claude的常见挑战 在Node.js后端服务中集成Claude模型,…...
手把手教你ClickHouse(二、Windows下Docker部署与可视化实战)
1. Windows下Docker环境准备 在开始部署ClickHouse之前,我们需要先确保Windows系统已经正确配置Docker环境。这里我推荐使用Docker Desktop for Windows,它提供了图形化界面和完整的容器管理功能。安装过程可能会遇到几个常见坑点,我把自己实…...
Cognize-Agent™空间智能体,98.5%故障预警准确率,终结非计划停机
Cognize-Agent™空间智能体,98.5%故障预警准确率,终结非计划停机工业制造领域,设备非计划停机始终是制约生产效率、拉高运维成本的核心痛点。传统设备运维依赖定期检修、事后抢修,依赖人工巡检与单一数据监测,无法提前…...
微信消息自动转发终极指南:5分钟实现跨群智能消息同步
微信消息自动转发终极指南:5分钟实现跨群智能消息同步 【免费下载链接】wechat-forwarding 在微信群之间转发消息 项目地址: https://gitcode.com/gh_mirrors/we/wechat-forwarding 在微信群管理和协作场景中,消息的自动转发与同步是提升效率的关…...
2026毕业季必看!告别求职死循环,这两个高薪赛道让你稳上岸!
家人们谁都没想到,2026年毕业季求职难度直接拉满,堪称历年最难就业季!全国1270万高校毕业生扎堆涌入求职市场,岗位僧多粥少、竞争内卷到极致,无数应届生陷入一模一样的求职困境:精心打磨的简历海投出去&…...


