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

stm32入门学习14-电源控制

有时候我们的程序中有些触发执行条件,有时这些触发频率很少,我们的程序就一直在循环,这样就很浪费电,我们可以通过PWR电源控制来实现低功耗模式,即只有在触发时才执行程序,其余时间可以关闭一些没必要的设备以达到省电的目的

低功耗模式有三种,分别为睡眠模式、停机模式和待机模式,他们的电量损耗:睡眠模式>停机模式>待机模式,但是他们的唤醒条件则和电量损耗成相反的关系。睡眠模式唤醒比较简单,内部中断和外部中断都可以唤醒睡眠模式;停机模式次之,只有外部中断才可以唤醒停机模式,待机模式唤醒方式最难,只有指定的几个中断事件才可以唤醒

(一)睡眠模式

睡眠的开启十分简单,只需要在程序的最后加一句代码即可,这里的中断使用外部中断,外部中断的配置主要有这几步:时钟、时钟通道、EXTI、NVIC

void key_init()
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_InitTypeDef gpio_init;gpio_init.GPIO_Mode = GPIO_Mode_IPU;gpio_init.GPIO_Pin = GPIO_Pin_6;gpio_init.GPIO_Speed = GPIO_Speed_10MHz;GPIO_Init(GPIOA, &gpio_init);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource6);EXTI_InitTypeDef exti_init;exti_init.EXTI_Line = EXTI_Line6;exti_init.EXTI_Mode = EXTI_Mode_Interrupt;exti_init.EXTI_Trigger = EXTI_Trigger_Rising;exti_init.EXTI_LineCmd = ENABLE;EXTI_Init(&exti_init);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef nvic_init;nvic_init.NVIC_IRQChannel = EXTI9_5_IRQn;nvic_init.NVIC_IRQChannelPreemptionPriority = 1;nvic_init.NVIC_IRQChannelSubPriority = 1;nvic_init.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&nvic_init);
}

我们只要在程序要进入睡眠模式的地方加入一句__WFI即可进入睡眠模式,当睡眠模式被唤醒后,将从进入睡眠模式的地方继续执行代码

int main()
{key_init();OLED_Init();while(1){if (flag == 1){OLED_ShowString(1, 1, "key_down");Delay_ms(500);OLED_Clear();flag = 0;}__WFI();}return 0;
}

这里的现象是我们按下按键产生上升沿外部触发,OLED屏幕上会显示key_down,然后进入睡眠模式,等待下一次触发

睡眠模式不仅可以用外部中断触发,也可以用内部中断触发

(二)停机模式

停机模式开启比睡眠模式稍微复杂,由于停机模式只能被外部中断或事件唤醒,因此还是采用按键唤醒操作,进入停机模式前要先开启电源管理的时钟,接着在要进入停机模式的地方调用进入睡眠模式的代码即可

第一个参数是配置调节器在停止模式的工作状态,第二个参数是配置停止模式的唤醒方式

int main()
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);OLED_Init();external_interrupt_init();while (1){if (flag == 1){OLED_ShowString(1, 1, "button_down");Delay_ms(500);OLED_Clear();flag = 0;}PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);SystemInit();}return 0;
}

值得注意的是,停机模式会把72MHz的时钟晶振给关闭,而在唤醒停机模式后却不会自动打开,如果我们没有手动打开,则程序以HSI的8MHz的时钟运行,这会导致程序的运行速度不符合我们的预期,尤其是在显示时长方面能明显感觉到显示时间变长,由于停机模式被唤醒后也是在进入停机模式的地方重新开始执行代码,我们只要在进入停机模式的代码后面加入系统初始化函数即自动帮助我们初始化系统时钟;

(三)待机模式

待机模式只能被指定的几个事件唤醒,待机模式和停机模式一样,只要调用pwr模块的一个函数即可进入,当然事先要先使能其时钟

这里选择使用RTC闹钟唤醒,我们从当前时间开始,每隔1小时唤醒一次,然后显示1分钟唤醒时候的时间,然后进入待机模式

int main()
{SystemInit();unsigned int t;struct tm* time;clock_bkp_init();clock_init();OLED_Init();RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);while (1){t = RTC_GetCounter();time = clock_read_time();RTC_SetAlarm(t+60*60);OLED_ShowString(1, 1, "XXXX-XX-XX");OLED_ShowString(2, 1, "xx:xx:xx");OLED_ShowNum(1, 1, time->tm_year, 4);OLED_ShowNum(1, 6, time->tm_mon, 2);OLED_ShowNum(1, 9, time->tm_yday, 2);OLED_ShowNum(2, 1, time->tm_hour, 2);OLED_ShowNum(2, 4, time->tm_min, 2);OLED_ShowNum(2, 7, time->tm_sec, 2);Delay_s(60);OLED_Clear();PWR_EnterSTANDBYMode();}
}

这里在唤醒待机模式后,其时钟不是72MHz时钟,我们要手动调用系统初始化函数来调节,但是这里的系统初始化函数不能放在待机模式后面调用,因为待机模式在被唤醒后是从程序开始的地方执行(相当于按了一次复位键),所以我们把系统初始化函数放在程序开头;

(四)总结

通过多种stm32的低功耗模式学习,我们了解了stm32多种低功耗模式的使用以及之间的区别,通过进入低功耗模式,可以让一些在长时间处于空循环的程序更加省电

相关文章:

stm32入门学习14-电源控制

有时候我们的程序中有些触发执行条件,有时这些触发频率很少,我们的程序就一直在循环,这样就很浪费电,我们可以通过PWR电源控制来实现低功耗模式,即只有在触发时才执行程序,其余时间可以关闭一些没必要的设备…...

[C++][opencv]基于opencv实现photoshop算法色相和饱和度调整

【测试环境】 vs2019 opencv4.8.0 【效果演示】 【核心实现代码】 HSL.hpp #ifndef OPENCV2_PS_HSL_HPP_ #define OPENCV2_PS_HSL_HPP_#include "opencv2/core.hpp" using namespace cv;namespace cv {enum HSL_COLOR {HSL_ALL,HSL_RED,HSL_YELLOW,HSL_GREEN,HS…...

Github 2024-08-16Java开源项目日报 Top10

根据Github Trendings的统计,今日(2024-08-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10TypeScript项目1Ruby项目1Apache Dubbo: 高性能的Java开源RPC框架 创建周期:4441 天开发语言:Java协议类型:Apache License 2.0St…...

AI学习记录 - torch 的 matmul和dot的关联,也就是点乘和点积的联系

有用大佬们点点赞 1、两个一维向量点积 ,求 词A 与 词A 之间的关联度 2、两个词向量之间求关联度,求 : 词A 与 词A 的关联度 5 词A 与 词B 的关联度 11 词B 与 词A 的关联度 11 词B 与 词B 的关联度 25 刚刚好和矩阵乘法符合: 3、什么是…...

leetcode 885. Spiral Matrix III

题目链接 You start at the cell (rStart, cStart) of an rows x cols grid facing east. The northwest corner is at the first row and column in the grid, and the southeast corner is at the last row and column. You will walk in a clockwise spiral shape to visi…...

mysql windows安装与远程连接配置

安装包在主页资源中 一、安装(此安装教程为“mysql-installer-community-5.7.41.0.msi”安装教程,安装到win10环境) 保持默认选项,点击”Next“。 点开第一行加号展开一路展开找到“MySQL Server 5,7,41 - X64”点击选中点击一下中间只想右侧的箭头看到…...

子网掩码是什么以及子网掩码相关计算

子网掩码 (Subnet Mask) 又称网络掩码 (Netmask),告知主机或路由设备,地址的哪一部分是网络号,包括子网的网络号部分,哪一部分是主机号部分。 子网掩码使用与IP地址相同的编址格式,即32 bit—4个8位组的32位长格式。…...

仿RabbitMQ实现消息队列

前言:本项目是仿照RabbitMQ并基于SpringBoot Mybatis SQLite3实现的消息队列,该项目实现了MQ的核心功能:生产者、消费者、中间人、发布、订阅等。 源码链接:仿Rabbit MQ实现消息队列 目录 前言:本项目是仿照Rabbi…...

SpringBoot教程(二十三) | SpringBoot实现分布式定时任务之xxl-job

SpringBoot教程(二十三) | SpringBoot实现分布式定时任务之xxl-job 简介一、前置条件:需要搭建调度中心1、先下载调度中心源码2、修改配置文件3、启动项目4、进行访问5、打包部署(上正式) 二、SpringBoot集成Xxl-Job1.…...

微前端架构的数据持久化策略与实践

微前端架构通过将一个大型前端应用拆分成多个小型、自治的子应用,提升了开发效率和应用的可维护性。然而,数据持久化作为应用的基础需求,在微前端架构中实现起来面临着一些挑战。本文将详细介绍在微前端架构下实现数据持久化的策略、技术和最…...

讲解 狼人杀中的买单双是什么意思

买单双这个概念通常出现在有第三方的板子中 比如 咒狐板子 丘比特板子 咒狐板子 第一天狼队只要推掉预言家 第二天就可以与咒狐协商绑票 推出其他好人 以及丘比特板子 如果拉出一个人狼链 那么如果孤独再连一个狼人 那么 狼队第一天就可以直接派人上去拿警徽,这样…...

回归分析系列5-贝叶斯回归

07贝叶斯回归 7.1 简介 贝叶斯回归将贝叶斯统计的思想应用于回归分析中,通过先验分布和似然函数来推断后验分布。在贝叶斯回归中,模型参数被视为随机变量,并且有自己的分布。通过贝叶斯公式,可以更新这些参数的分布,…...

oracle 数据中lsnrctl 是干啥的

突然发现lsnrctl stop 之后,依然可以启动数据库 就感觉怪怪的,一直以为这个是数据库的守护进程,原来不是。。。。 lsnrctl 是 Oracle 监听器控制实用程序的命令行界面工具,用于管理 Oracle Net 服务监听器。监听器是 Oracle 网络…...

Linux进程--进程地址空间

文章目录 一、进程地址空间1.想当然的内存2.实际的内存1.什么是地址空间2.地址空间和内存3.为什么要区分两种内存 一、进程地址空间 1.想当然的内存 我们在之前的学习中了解过内存的概念,所以变量都要存在内存中我们的程序才能跑起来,那么我们肯定也见…...

C语言传递指针给函数

C 语言允许您传递指针给函数,只需要简单地声明函数参数为指针类型即可。 下面的实例中,我们传递一个无符号的 long 型指针给函数,并在函数内改变这个值 实例1:获取系统的时间值 能接受指针作为参数的函数,也能接受数…...

探索 Kubernetes 持久化存储之 Rook Ceph 初窥门径

在 Kubernetes 生态系统中,持久化存储是支撑业务应用稳定运行的基石,对于维护整个系统的健壮性至关重要。对于选择自主搭建 Kubernetes 集群的运维架构师来说,挑选合适的后端持久化存储解决方案是关键的选型决策。目前,Ceph、Glus…...

今日(2024 年 8 月 13 日)科技新闻

我国成功发射卫星互联网高轨卫星:该卫星的成功发射将助力我国卫星互联网的发展。中国首台中子全散射谱仪运行 3 年成果丰硕:由粤港科技合作打造的多物理谱仪,在中国散裂中子源上运行 3 年来,已完成 300 多项用户实验。该谱仪的关键…...

Unity大场景切换进行异步加载时,如何设计加载进度条,并配置滑动条按照的曲线给定的速率滑动

一、异步加载场景的过程 1、异步加载场景用到的API LoadSceneAsync 2、异步加载的参数说明 (1)默认参数:SceneManagement.LoadSceneAsync(“SceneName”); AsyncOperation task SceneManager.LoadSceneAsync("SceneName");&a…...

Selenium + Python 自动化测试16(Python基础复习)

我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。 上一篇我们讨论了使用模块化测试的测试模型,从某一程度也反映出熟练掌握一门编程语言的重要性。 为了后续进一步深入学习。本篇文章主要做下Python基础知识的复习。…...

2024新型数字政府综合解决方案(六)

新型数字政府综合解决方案通过融合人工智能、大数据、区块链和云计算技术,构建了一个全方位智能化的政务平台,旨在提升政府服务的效率、透明度和公众参与度。该方案实现了跨部门的数据互联互通与实时更新,利用先进的数据分析和自动化处理技术…...

XML Group端口详解

在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...