STM32学习和实践笔记(33):待机唤醒实验

1.STM32待机模式介绍

  很多单片机具有低功耗模式,比如MSP430、STM8L等,我们的STM32也不例外。默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下,HCLK CPU提供时钟,并执行程序代码。这是正常的一般运行模式。

当 CPU 不需继续运行(例如等待外部事件)时,可以利用多种低功耗模式来节省功耗。用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等条件,选定一个最佳的低功耗模式。

  当然在运行模式下,也可以通过如下方式降低功耗

1)降低系统时钟速度

2不使用 APBxAHB 外设时,将对应的外设时钟关闭

STM32 提供了 3 种低功耗模式,以达到不同层次的降低功耗的目的,这三种模式如下:

1)睡眠模式CM3 内核停止工作,外设仍在运行

2)停止模式(所有时钟都停止

(3)待机模式( 1.8 V 内核电源关闭)

   这三种模式所需的功耗是逐级递减,也就是说待机模式功耗是最低的。三种低功耗模式汇总表如图所示: 

           

本章我们仅对STM32的待机模式进行介绍,其他2种模式可以参考《STM32F10x中文参考手册》-4电源控制器(PWR)章节,里面有详细的介绍。

 睡眠模式中,仅关闭了内核时钟,内核停止运行,但其片上外设, CM3 核心的外设全都照常运行。

停止模式中,进一步关闭了其它所有的时钟,于是所有的外设都停止了工作,但由于其 1.8V 区域的部分电源没有关闭,还保留了内核的寄存器、内存的信息,所以从停止模式唤醒,并重新开启时钟后,还可以从上次停止处继续执行代码。

待机模式中,它除了关闭所有的时钟,还把 1.8V 区域的电源也完全关闭了,也就是说,从待机模式唤醒后,由于没有之前代码的运行记录,只能对芯片复位,重新检测BOOT条件,从头开始执行程序。

那么我们如何进入待机模式呢?其实很简单,只要按图所示的步骤执行就可以了。

  从待机模式唤醒后,程序将按照复位(启动引脚采样、复位向量已获取等)后的方式重新执行。电源控制/状态寄存器(PWR_CSR)将会指示内核由待机状态退出。

  在进入待机模式后,除了复位引脚以及被设置为防侵入或校准输出时的 TAMPER (PC13)引脚和被使能的唤醒引脚WK_UP 脚(PA0)),其他的 IO 引脚都将处于高阻态

2.待机模式配置步骤

  接下来我们介绍下如何使用库函数进入和退出待机模式。这个也是在编写程序中必须要了解的。具体步骤如下:(电源管理相关库函数在stm32f10x_pwr.c和stm32f10x_pwr.h文件中

1)使能电源时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);

2)设置WK_UP引脚为唤醒源

PWR_WakeUpPinCmd(ENABLE);

3)进入待机模式

PWR_EnterSTANDBYMode();//进入待机模式

PWR_ClearFlag(PWR_FLAG_WU);//清除Wake-up 标志          

3.硬件电路

  本实验使用到硬件资源如下:

(1)D1指示灯

(2)串口1

(3)K_UP按键

D1指示灯用来提示系统正常运行,K_UP按键用来唤醒待机模式,串口1用来输出提示信息。

4.编写待机唤醒程序

  本实验所要实现的功能是:系统运行时D1指示灯闪烁,5秒后进入待机模式,D1指示灯熄灭,同时串口printf输出相关提示信息,通过K_UP按键实现唤醒。程序框架如下:

(1)配置进入与退出待机模式

(2)编写主函数

main.c

#include "system.h"
#include "led.h"
#include "SysTick.h"
#include "usart.h"
#include "input.h"
#include "wakeup.h"int main()
{u8 i;SysTick_Init(72);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级分组LED_Init();USART1_Init(9600);while(1){for (i=9;i>0;i--){printf("time:=%d\r\n",i);led1=!led1;delay_ms(1000);}printf("进入待机模式\r\n");delay_ms(1000);Enter_StandbyMode();}
}

wakeup.c

#include "wakeup.h"void Enter_StandbyMode()
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//1)使能电源时钟PWR_WakeUpPinCmd(ENABLE);//(2)设置WK_UP引脚为唤醒源PWR_ClearFlag(PWR_FLAG_WU);//清除Wake-up 标志PWR_EnterSTANDBYMode();//进入待机模式}

 wakeup.h

#ifndef _wakeup_H
#define _wakeup_H#include "system.h"void Enter_StandbyMode(void);#endif

  以上程序烧录到开发板上测试,结果如下。实验是成功的。

  

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

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

相关文章

kafka学习笔记06

Kafka数据存储流程和log日志讲解 讲解分布式应用核心CAP知识 Kafka数据可靠性保证原理之副本机制Replica介绍《上》 Kafka数据可靠性保证原理之副本机制Replica介绍《下》 Kafka数据可靠性保证原理之ISR机制讲解 Kafka的HighWatermark的作用你知道多少

暑期来临,AI智能视频分析方案筑牢防溺水安全屏障

随着夏季暑期的来临,未成年人溺水事故频发。传统的防溺水方式往往依赖于人工巡逻和警示标识的设置,但这种方式存在人力不足、反应速度慢等局限性。近年来,随着视频监控智能分析技术的不断发展,其在夏季防溺水中的应用也日益凸显出…

恒创科技:无法与服务器建立安全连接怎么解决?

在使用互联网服务时,有时会出现无法与服务器建立安全连接的问题,此错误消息通常出现在尝试访问需要安全连接的网站(例如使用 HTTPS 的网站)时,这可能是由于多种原因造成的,以下是一些常见的解决方法,帮助你解决问题。 …

聚道云软件连接器:打通易快报与保融资金系统,实现高效财务管理

一、客户介绍:食品企业,引领健康零食新风尚 某食品行业的公司作为国内领先的集研发、生产、销售为一体的现代化辣味休闲食品企业。该公司秉承“健康、美味、安全”的理念,不断创新和进取,为消费者带来了一系列美味可口的辣味休闲…

msvcp100.dll丢失怎样修复?几种快速有效修复msvcp100.dll丢失的方法

在使用电脑时是不是遇到过关于msvcp100.dll丢失文件丢失的情况?出现这样的情况有什么办法可以将丢失的msvcp100.dll文件快速恢复?今天的这篇文章就将教大家几种能够有效的解决msvcp100.dll丢失问题的方法。 方法一:重启电脑 重启电脑是一种简…

参数高效微调PEFT(三)快速入门LoRA、AdaLoRA

参数高效微调PEFT(三)快速入门LoRA、AdaLoRA 我们已经了解了HuggingFace中peft库的几种高效微调方法。 参数高效微调PEFT(一)快速入门BitFit、Prompt Tuning、Prefix Tuning 参数高效微调PEFT(二)快速入门P-Tuning、P-Tuning V2 今天我们继续了解大火的高效微调方法LoRA以及…

MyBatis基础理解教程,详细分步基础查询表数据练习(通俗易懂、实时更新)

一、MyBatis是什么 MyBatis 是一个持久层框架,简化JDBC开发,它提供了一个从 Java 应用程序到 SQL 数据库的桥梁,用于数据的存储、检索和映射。MyBatis 支持基本的 SQL 操作、高级映射特性以及与 Maven 等构建工具的集成。 二、持久层是什么…

Spring boot集成通义千问大模型

Spring boot集成通义千问大模型 背景 我在用idea进行java开发时发现了通义灵码这款免费的智能代码补全插件,用了一段时间了,感觉很不错。就想着在自己的项目中也能集成通义千问大模型实现智能回答,毕竟对接openai需要解决网络问题&#xff…

战略合作 | 竹云赋能雁塔区数字经济高质量发展

2024年5月30日,由西安市数据局指导,中共西安市雁塔区委、西安市雁塔区人民政府主办的 “雁塔区企业数字化转型发展大会” 在西安开幕。 本次活动以“数智雁塔,引领未来”为主题,特邀业内150余位政府、数字化服务企业、传统行业企…

先导微型数控桌面式加工中心

随着数控技术、传感器技术、人工智能等技术的不断发展,制造业的快速发展和技术的不断进步,小型五轴加工中心的性能将不断提升,五轴联动技术作为解决异性复杂零件高效优质加工问题的重要手段,使其具有更广泛的应用前景。小型五轴加…

5.30 学习总

刷题记录(Codeforces Round 947 (Div. 1 Div. 2)B,C题)和Codeforces Round 948 (Div. 2)B题 一.B. 378QAQ and Mochas Array B. 378QAQ and Mochas Array time limit per test 1 second memory limit per test 256 megabytes in…

长难句5.30

Researchers measured people’s cortisol, which is a stress marker, while they were at work and while they were at home and found it higher at what is supposed to be a place of refuge. 研究人员测量了人们在工作中和在家里的皮质醇(压力的一种标志),结…

为啥装了erlang,还报错erl: command not found?

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 问题背景: 在一台不通外网的服务器上装rabbitmq,然后在启动的时候,遇到了报错 “/usr/lib/…

C#中使用Mapster

Mapster是一个开源的.NET对象映射库,它提供了一种简单而强大的方式来处理对象之间的映射。 多个映射框架的性能对比: 第一步安装Mapster 使用方法 public class Test {public string name { get; set; }public string sex { get; set; }public string…

C语言数据结构(超详细讲解)| 二叉树的实现

二叉树 引言 在计算机科学中,数据结构是算法设计的基石,而二叉树(Binary Tree)作为一种基础且广泛应用的数据结构,具有重要的地位。无论是在数据库索引、内存管理,还是在编译器实现中,二叉树都…

记录Win11安装打印机驱动过程

1. 首先下载打印机对应型号的驱动 可以从这里下载:打印机驱动,打印机驱动下载 - 打印机驱动网 2. 下载 3. 打开控制面板-->设备和打印机 找到目标打印机添加设备即可 新增打印纸张尺寸

B站稿件生产平台高可用建设分享

背景 B站作为国内领先的内容分享平台,其核心功能之一便是支持UP主们创作并分享各类视频内容。UP主稿件系统作为B站内容生产的关键环节,承担着从内容创作到发布的全过程管理。为了满足不同创作者的需求,B站提供了多种投稿渠道,包括…

方差分析的七种类型

方差分析(ANOVA)是一种用于检验两个以上样本均数差别的显著性统计方法。根据不同的研究设计和数据类型,方差分析可以分为以下7种类型。 一、单因素方差分析 ①单因素方差分析说明 单因素方差分析用于研究一个定类数据(自变量&am…

【原创教程】MES服务器与成品打标机控制说明

1 实现的功能及应用的场合 MES即制造执行系统(manufacturing execution system,简称MES),即在加强MRP计划的执行功能,把MRP计划同车间作业现场控制,通过执行系统联系起来。 MES是一个生产管理智能化的一个系统,是用于生产时记录数据、产量等信息的智能管理系统。 该项…

SpockMockStatic方法

SpockMockStatic方法 参考: https://blog.csdn.net/knighttools/article/details/44630975 ‍ static方法 import com.meituan.mafka.client.producer.IProducerProcessor; import com.meituan.mdp.langmodel.api.message.AssistantMessage; import com.sankuai.gaigc.arrang…