STM32 低功耗-睡眠模式

STM32 睡眠模式


文章目录

  • STM32 睡眠模式
  • 第1章 低功耗模式简介
  • 第2章 睡眠模式简介
    • 2.1 进入睡眠模式
    • 2.1 退出睡眠模式
  • 第3章 睡眠模式代码示例
  • 总结


第1章 低功耗模式简介

在 STM32 的正常工作中,具有四种工作模式:运行、睡眠、停止和待机模式。

在系统或电源复位以后,微控制器处于运行状态,当CPU不需继续运行时,可以利用多种低功耗模式来节省功耗。这些低功耗模式电源消耗不同、唤醒时间不同和唤醒源不同。
例如等待某个外部事件时,用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等条件,所以需要根据自身的需要选定一个最佳的低功耗模式。

STM32F1有三种低功耗模式:
1、 睡眠模式(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行)。
2、 停止模式(所有的时钟都已停止)。
3、 待机模式(1.8V电源关闭)。

各种低功耗模式的对比如下表:
在这里插入图片描述
说明:
WFI和WFE都是系统指令,WFI是表示中断,WFE表示事件。

第2章 睡眠模式简介

在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。

2.1 进入睡眠模式

进入睡眠模式:
通过执行WFI或WFE指令进入睡眠状态。根据Cortex™ M3系统控制寄存器中的SLEEPONEXIT位的值,有两种选项可用于选择睡眠模式进入机制:
1、SLEEP-NOW:如果SLEEPONEXIT位被清除,当WRI或WFE被执行时,微控制器立即进入睡眠模式。
2、SLEEP-ON-EXIT:如果SLEEPONEXIT位被置位,系统从最低优先级的中断处理程序中退出时,微控制器就立即进入睡眠模式。

两种进入睡眠模式的模式 WFI 和 WFE:
WFI(Wait for interrupt)和 WFE(Wait for event)都是内核指令,会调用对应汇编指令,具体描述可以查看**《CM3 权威指南》**。

进入睡眠模式,内核时钟关闭,内核停止,所有外设包括 Cortex M3 核心的外设,如 NVIC、系统时钟(SysTick)等仍在运行,保留睡眠前的寄存器数据、内存数据等。

2.1 退出睡眠模式

退出睡眠模式:
如果执行WFI指令进入睡眠模式,任意一个被嵌套向量中断控制器响应的外设中断都能将系统从睡眠模式唤醒。
如果执行WFE指令进入睡眠模式,则一旦发生唤醒事件时,微处理器都将从睡眠模式退出。

如何进入和退出睡眠模式,细节参考如下表:
在这里插入图片描述

第3章 睡眠模式代码示例

代码如下:

main.cKEYUP_Init();
while(1)
{if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3) == 0){LED1 = 0;__WFI();/* 进入睡眠模式 */LED1 = 1;}
}
void KEYUP_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;EXTI_InitTypeDef EXTI_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);       /* 使能复用功能时钟 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);      /* 使能按键端口时钟 *//* PA0端口配置 */GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;                 /* WK_UP引脚 */GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;              /* 下拉输入 */GPIO_Init(GPIOA, &GPIO_InitStructure);                     /* 初始化WK_UP按键端口 *//* PA0 中断线以及中断初始化配置    WK_UP */GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);EXTI_InitStructure.EXTI_Line = EXTI_Line0;               EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;    EXTI_InitStructure.EXTI_LineCmd = ENABLE;                  /* 使能中断线 */EXTI_Init(&EXTI_InitStructure);                     /* 外部中断0 NVIC 配置 */NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;       NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;        NVIC_Init(&NVIC_InitStructure);                      
}
void EXTI0_IRQHandler(void)
{delay_ms(20);                      /* 延时消抖 */if(EXTI_GetFlagStatus(EXTI_Line0) == SET){printf("退出睡眠模式\r\n");}EXTI_ClearITPendingBit(EXTI_Line0);/* 清除LINE0上的中断标志位 */
}

总结

实验现象:当按键按下后,进入睡眠模式,LED1点亮,PA0所在外部中断触发后退出睡眠模式,LED1熄灭。

睡眠模式相对比较简单些,直接调用一下系统指令__WFI就可以进入睡眠了,退出只需一个任意外部中断即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/82087.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷歌推出Flax:JAX的神经网络库

在优化理论中,损失或成本函数测量拟合或预测值与实际值之间的距离。对于大多数机器学习模型,提高性能意味着最小化损失函数。 但对于深度神经网络,执行梯度下降以最小化每个参数的损失函数可能会消耗大量资源。传统方法包括手动推导和编码&a…

nginx部署以及反向代理多域名实现HTTPS访问

nginx部署以及反向代理多域名实现 1.nginx部署 1.1 编写nginx部署文件 docker-compose.yml version: 3 services: nginx:restart: always image: nginx:1.20container_name: nginx-mainports:- 80:80- 443:443volumes: # 基础配置- /opt/nginx_main/nginx-info/nginx.conf:/…

【枚举】CF1706 C

有人一道1400写了一个小时 Problem - C - Codeforces 题意: 思路: 首先先去观察样例: 很显然,对于n是奇数的情况,只有一种情况,直接操作偶数位就好了 主要是没搞清楚n是偶数的情况 其实有个小技巧&…

SQL 相关子查询 和 不相关子查询、Exists 、Not Exists、 多表连接(包含自连接)

不相关子查询 子查询的查询条件不依赖于父查询,称不相关子查询。子查询可以单独运行的 select stu_id,sex,age from student t where sex(select sexfrom studentwhere stu_id10023 )相关子查询 关联子查询 子查询的查询条件依赖于父查询,称为 相关子…

protobuf 2定义string常量

背景 protobuf 2中定义的enum枚举值必须为数字类型,故不支持string类型,但有些业务场景又确实需要定义string常量。 目标 在protobuf 2中定义string常量。 方案 思路:通optional default实现string常量。 细节: 1、protobu…

冠达管理:创新药概念强势拉升,康希诺大涨超15%

立异药概念9日盘中强势拉升,到发稿,昊帆生物“20cm”涨停,康希诺大涨超15%,翰宇药业涨近13%,德展健康涨停,泰格医药、药石科技涨超7%。 康希诺昨日晚间公告,8月7日,公司与 AstraZene…

机器学习笔记 - 使用 YOLOv5、O​​penCV、Python 和 C++ 检测物体

一、YOLO v5简述 YOLO v5虽然已经不是最先进的对象检测器,但是YOLOv5 使用了一个简单的卷积神经网络 CNN架构(相对YOLO v8来讲,不过v8精度是更高了一些),更易理解。这里主要介绍如何轻松使用 YOLO v5来识别图像中的对象。将使用 OpenCV、Python 和 C++ 来加载和调用我们的…

Flowable-结束事件-错误结束事件

目录 定义图形标记XML内容界面操作使用示例视频教程 定义 错误结束事件会在流程到达错误结束事件的时候抛出错误,并结束当前的流程分支。异常结束 事件是有抛出结果的,它需要定义抛出错误码,如果找到了异常开始事件错误码,就会触…

Linux中安装Node

安装 先从 官方网站 下载安装包,有时 node 版本太新会导致失败,详见下方的常见问题第2点 cd /home // 创建目录,将下载好的 node 安装包上传到此目录 mkdir Download mkdir /usr/local/lib/node解压 // 解压,前面是文件当前路径…

在excel调用SAP函数执行SAP数据查找或提交

1、下载插件 2、安装插件 3、执行函数 3.1 第一步 通过SAPRegister连接SAP服务器 var reg SAPRegister("10.10.14.15", "00", "mes", "AQ123456", "800") 需要改为实际的连接信息 "10.10.14.15" 为SAP服务器I…

IDEA 指定spring.profiles.active本地启动

spring.profiles.activedev spring.profiles.activepro

20230809在WIN10下使用python3将DOCX文件转换为TXT文件

20230809在WIN10下使用python3将DOCX文件转换为TXT文件 2023/8/9 11:38 python docx txt https://blog.51cto.com/u_16175446/6620474 如何实现Python读取word内容转为TXT的具体操作步骤 如何实现Python读取word内容转为TXT的具体操作步骤 原创 mob649e81576de12023-07-04 14:0…

为什么会觉得CSS比JavaScript难?

前言 是的,就像你问题中描述的,“用起来没有底,有填不完的坑”,这大概就是css难的地方,因为css关乎的是页面整体的一个ui设计,暂且不说本身关于css的内容是非常繁杂的,主要是页面的设计是考验创…

flutter开发实战-实现首页分类目录入口切换功能

。 在开发中经常遇到首页的分类入口,如美团的美食团购、打车等入口,左右切换还可以分页更多展示。 一、使用flutter_swiper_null_safety 在pubspec.yaml引入 # 轮播图flutter_swiper_null_safety: ^1.0.2二、实现swiper分页代码 由于我这里按照一页8…

Element的el-select下拉框多选添加全选功能

先看效果图 全选: 没有选中时: 选中部分: 作者项目使用的是vue3写法,如果是vue2的自己转换一下 html代码: js代码: 拓展 另一种方法,如果不想使用勾选框,可以试试下面的方…

PPG心率血氧检测健康型沙发方案

《中国心血管健康与疾病报告2021》数据显示,我国心血管病患病人数已达 3.3 亿。目前,心脑血管病 死亡占城乡居民总死亡原因的首位,农村为46.7%,城市为44%。老年人是心脑血管病的主要发病体,老年 人患心脑血管病的几率较…

2023牛客暑期多校训练营7-c-Beautiful Sequence

思路: ,则有,也就是说只要知道A1就可以求任意A。由于A是升序排列,所以对于任意,二进制所包含1的最高位第k位来说,表明与第k位相反,要大一些,所以它的第k位为1,的第k位为…

问题解决和批判性思维是软件工程的重要核心

软件工程的重心在于问题解决和批判性思维(合理设计和架构降低复杂度),而非仅局限于编程。 许多人误以为软件工程就只是编程,即用编程语言编写指令,让计算机按照这些指令行事。但实际上,软件工程的内涵远超…

85. 最大矩形

题目描述 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例 1: 输入:matrix [["1","0","1","0","0"],["1…

HBase Shell 操作

1、基本操作 1.1、进入HBase客户端命令行 前提是先启动hadoop集群和zookeeper集群。 bin/hbase shell 1.2、查看帮助命令 helphelp 查看指定命令的语法规则 查看 list_namespace 的用法(‘记得加单引号’) help list_namespace 2、namespace 我们…