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

进入低功耗和唤醒

休眠模式

进入休眠模式

如果使用 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( &times );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 指令进入睡眠模式&#xff0c;则嵌套向量中断控制器 (NVIC) 确认的任意外设中断都会 将器件从睡眠模式唤醒。 如果使用 WFE 指令进入睡眠模式&#xff0c;MCU 将在有事件发生时立即退出睡眠模式。唤醒事件可 通过以下方式产生&#xff…...

【多线程】volatile 关键字

volatile 关键字 1. 保证内存可见性2. 禁止指令重排序3. 不保证原子性 1. 保证内存可见性 内存可见性问题: 一个线程针对一个变量进行读取操作&#xff0c;另一个线程针对这个变量进行修改操作&#xff0c; 此时读到的值&#xff0c;不一定是修改后的值&#xff0c;即这个读线…...

【Windows注册表内容详解】

Windows注册表内容详解 第一章节 注册表基础 一、什么是注册表 注册表是windows操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心“数据库”&#xff0c;也可以说是一个非常巨大的树状分层结构的数据库系统。 注册表记录了用户安装在计算机上的软件和每个程…...

大数据Hadoop入门之集群的搭建

hadoop的三种运行模式 本地模式:测试本地的hadoop是否能够运行&#xff0c;用来运行官方的代码。伪分布模式:原先有人拿来测试&#xff0c;目前测试都不用这个模式了。完全分布模式&#xff1a;多台服务器组成分布式环境&#xff0c;生产环境使用 分布式主机文件同步命令 sc…...

华为云云耀云服务器L实例评测|基于云服务器的minio部署手册

华为云云耀云服务器L实例评测|基于云服务器的minio部署手册 【软件安装版本】【集群安装&#xff08;是&#xff09;&#xff08;否&#xff09;】 版本 创建人 修改人 创建时间 备注 1.0 jz jz 2023.9.2 minio华为云耀服务器 一. 部署规划与架…...

龙智携手Atlassian和JFrog举办线下研讨会,探讨如何提升企业级开发效率与质量

2023年9月8日&#xff0c;龙智将携手Atlassian和JFrog于上海举办线下研讨会&#xff0c;以“大规模开发创新&#xff1a;如何提升企业级开发效率与质量”为主题&#xff0c;邀请龙智高级咨询顾问、Atlassian认证专家叶燕秀&#xff0c;紫龙游戏上海研发中心高级项目管理主管叶凯…...

2023数学建模国赛A题定日镜场的优化设计- 全新思路及代码

背景资料关键信息和要点如下&#xff1a; 定日镜&#xff1a;塔式太阳能光热发电站的基本组件&#xff0c;由纵向转轴和水平转轴组成&#xff0c;用于反射太阳光。 定日镜场&#xff1a;由大量的定日镜组成的阵列。 集热器&#xff1a;位于吸收塔顶端&#xff0c;用于收集太…...

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…...

水表电表集中远程抄表系统分析

电表水表远程抄表系统石家庄光大远通电气有限公司主要经营自动抄表,远程抄表,集中抄表,新供应信息&#xff0c;是石家庄光大远通电气有限公司自动远程抄表系统集信号采集、网络通信于一体的高性能抄表装置&#xff0c;该系统以485通讯方式读取水表电表的数据,以MBUS通讯方式读取…...

Android 通知

1. 原生Android通知的几种显示方式&#xff1a; 状态栏的图标&#xff1a;发出通知后&#xff0c;通知会先以图标的形式显示在状态栏中。 抽屉式通知栏&#xff1a;用户可以在状态栏向下滑动以打开抽屉式通知栏&#xff0c;并在其中查看更多详情及对通知执行操作。在应用或用户…...

【Unittest】Requests实现小程序项目接口测试

文章目录 一、搭建接口测试框架二、初始化日志三、定义全局变量四、封装接口五、编写测试用例六、生成测试报告 一、搭建接口测试框架 目录结构如下。 二、初始化日志 在utils.py文件中编写如下如下代码&#xff0c;初始化日志。 # 导入app.py全局变量文件 import app import l…...

Mac 搭建本地服务器

文章目录 一、启动服务器二、添加文件到本地服务三、手机/其他电脑 访问本机服务器 MacOS 自带Apatch 服务器。所以我这里选择Apatch服务器搭建 一、启动服务器 在safari中输入 http://127.0.0.1/ &#xff0c;如果页面出现 it works&#xff0c;则代表访问成功。启动服务器 …...

区块链基础之编写合约二

一、了解solidity中的关键字。 二、了解solidity中的类型。 三、编写合约 1.这里列出一些solidity中的关键字&#xff0c;有哪些。 pragma 作用&#xff1a;是告知编译器如何处理源代码的通用指令&#xff08;例如&#xff0c; pragma once &#xff09;。public 作用&#…...

【前端基础】js 如何判断一个值是数组

在JavaScript中&#xff0c;可使用不同的方法来判断一个值是否是一个数组。以下是一些常用的方法&#xff1a; 使用 Array.isArray() 方法&#xff1a; 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中间件 一&#xff1a;项目中引入elasticsearch相关依赖 我安装的elasticsearch版本是7.10.2 对应依赖的版本保持一致 此处省略springboot 搭建及必要的依赖项 <dependency><groupId>org.elasticsearch.client</group…...

【学习笔记】元学习如何解决计算机视觉少样本学习的问题?

目录 1 计算机视觉少样本学习 2 元学习 3 寻找最优初始参数值方法&#xff1a;MAML 3.1 算法步骤 3.2 代码&#xff1a;使用MAML 和 FO-MAML、任务增强完成Few-shot Classification 4 距离度量方法&#xff1a;Siamese Network,ProtoNet,RN 4.1 孪生网络&#xff08;Sia…...

【C语言】17-函数-3

1. 链接属性 当组成一个程序的各个源文件分别被编译之后,所有的目标文件以及那些从一个或多个函数库中引用的函数将链接在一起,形成可执行程序。然而,如果相同的标识符出现在几个不同的源文件中时,它们是表示同一个实体,还是表示不同的实体?标识符的链接属性决定如何处理…...

人工智能:为你提供的未来工作岗位

随着科技的快速发展&#xff0c;人工智能(Artificial Intelligence,AI)正逐渐渗透到各个领域。本文探讨一下人工智能可以提供的工作岗位&#xff0c;以期帮助大家更好地了解这个新兴行业的就业前景。 文章目录 1 机器学习工程师2 数据科学家3 自然语言处理工程师4 机器视觉工程…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...