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


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

  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【GPU原理】1.线程和缓存的关系

一、GPU如何做并行计算 1.简单的串行计算 对于如上的运算AXY,每次运算我们需要从内存读取两个数据,一个是x[i],一个是y[i],最后存回y[i]。这里面有一个FMA的操作(融合乘加(FMA)指令是RISC处理器…

基于Qt GraphicView 解析 CIM/G 电力接线图文件

本文讲述了如何使用Qt的框架来渲染展示标准的CIM/G格式的图形文件,也就是公用信息模型(common information model,CIM)中的G文件部分的内容。这是一种电力系统图形的交换规则,用于电网图形交换。 [by amjieker] CIM/G …

Ai晚班车531

1.中央网信办等三部门:加快推进大模型、生成式人工智能标准研制。 2.中国石油与中国移动、华为、科大讯飞签署合作协议。 3.Opera浏览器与谷歌云合作,接入 Gemini 大模型。 4.谷歌 Gemini 加持Chromebook Plus。 5.英飞凌:开发 8kW和12kW…

《技术人求职之道》:从入职到离职,全方位解析求职艺术

一、引言二、内容:该求职专栏包含什么三、结果:通过该专栏你将收获什么四、说明:关于该专栏的一些问题解答五、后记 一、引言 求职,这是每个人职业生涯中必经的阶段,技术人亦不例外。上一个冬天的寒风已过&#xff0c…

获取 Bean 对象更加简单的方式

获取 bean 对象也叫做对象装配,是把对象取出来放到某个类中,有时候也叫对象注⼊。 对象装配(对象注⼊)即DI 实现依赖注入的方式有 3 种: 1. 属性注⼊ 2. 构造⽅法注⼊ 3. Setter 注⼊ 属性注入 属性注⼊是使⽤ Auto…

MySQL性能分析工具——EXPLAIN

性能分析工具——EXPLAIN 1、概述 定位了查询慢的SQL之后,我们就可以使用EXPLAIN或DESCRIBE工具做针对性的分析查询语句 。 DESCRIBE语句的使用方法与EXPLAIN语句是一样的,并且分析结果也是一样的。 MySQL中有专门负责优化SELECT语句的优化器模块&…

报表工具DataEase技术方案(二)

一、DataEase报表功能开发流程 1. 创建数据源 2. 创建数据集 可以创建多种来源的数据集,这里以SQL数据集为例。 数据集SQL中可以添加参数,仪表板展示数据时可以根据参数来筛选数据。 数据集添加计算字段 3. 创建仪表板 (1)组合…

关于Posix标准接口和Nuttx操作系统

基本介绍 主要参考: Linux 系统中的 POSIX 接口详细介绍_linux posix-CSDN博客 POSIX(Portable Operating System Interface,可移植操作系统接口)是由 IEEE(Institute of Electrical and Electronics Engineers&#x…

LLVM入门教学——SanitizerCoverage插桩(Linux)

1、介绍 LLVM 的 SanitizerCoverage 是一种代码覆盖工具,设计用于支持基于 fuzzing 的测试和其他安全相关工具。SanitizerCoverage 在编译时插桩代码,以在运行时收集覆盖信息,从而帮助识别未覆盖的代码路径,提高测试的有效性和全…

详细介绍运算符重载函数,清晰明了

祝各位六一快乐~ 前言 1.为什么要进行运算符重载? C中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C中重新定义这些运算符&#xff…

摄影后期照片编辑工具:LrC2024 for Mac/win 中文激活版

LrC2024(Lightroom Classic 2024)是 Adobe 公司推出的一款专业级别的照片编辑和管理软件。它是 Lightroom Classic CC 的升级版,具有更多的功能和改进。 这款软件主要用于数字摄影师和摄影爱好者处理、编辑和管理他们的照片。它提供了一套强大…

锅炉智能制造工厂工业物联数字孪生平台,推进制造业数字化转型

在制造业快速发展的今天,数字化转型已经成为企业提升竞争力的关键途径。锅炉智能制造工厂工业物联数字孪生平台,作为一种创新的技术解决方案,正以其独特的优势,为制造业的数字化转型提供强大动力。锅炉智能制造工厂工业物联数字孪…

【网络研究观】-20240531

战争揭开美国武器优势的面纱 随着俄军在哈尔科夫地区稳步推进,乌克兰战争对美国国防机器而言是一场灾难,这一点越来越明显,这不仅是因为我们的援助未能挽救乌克兰的撤退和可能的失败。更重要的是,这场战争无情地暴露了我们国防体…

我用大模型校稿出书的经验心得

1. 第一本AI校稿的书 我的新书《云计算行业进阶指南》已经出版,本书使用了大模型进行AI校对书稿。 在本文稿发布前,我问了好几个AI,AI都说“还没有出版书籍宣称自己使用了AI校稿”,因此我可以说: 本书是第一本公开宣称…

Docker搭建Redis主从 + Redis哨兵模式(一主一从俩哨兵)

我这里是搭建一主一从,俩哨兵,准备两台服务器,分别安装docker 我这里有两台centos服务器 主服务器IP:192.168.252.134 从服务器IP:192.168.252.135 1.两台服务器分别拉取redis镜像 docker pull redis 2.查看镜像 d…

编写备份MySQL 脚本

目录 环境准备 增量备份 增量备份和差异备份 完整代码如下 测试脚本是否正常 星期天运行脚本(完全备份) 星期一运备份脚本(增量备份) 星期二备份数据(其他天--增量备份) 星期三备份数据(差异备…

cobalt strike基础测试

下载链接4.3:https://pan.baidu.com/s/1E_0t30tFWRiE5aJ7F-ZDPg 链接4.0:https://pan.baidu.com/s/1SkMmDem3l6bePqIDgUz2mA 提取码:burp 一、简介: cobalt strike(简称CS)是一款团队作战渗透测试神器,分为客户端…

C++笔试强训day37

目录 1.旋转字符串 2.合并k个已排序的链表 3.滑雪 1.旋转字符串 链接https://www.nowcoder.com/practice/80b6bb8797644c83bc50ac761b72981c?tpId196&tqId37172&ru/exam/oj 如果 A 字符串能够旋转之后得到 B 字符串的话,在 A 字符串倍增之后的新串中&am…

linux驱动学习(二)之点灯

需要板子一起学习的可以这里购买(含资料):点击跳转 如何实现对硬件控制 分析硬件原理图(开发板的原理图)----> 分析硬件的控制方法 ---> 控制硬件时,所要用到的寄存器 ----> 了解控制硬件寄存器的…

关于如何在Arch Linux上编写自己的第一个module

前一段时间一直想深入学习编写一个module插入到自己的内核当中,但是网上的资料基本上全都针对的Ubuntu和Debian等流行的Linux发行版,这里打算简单的记录一波博客。 啥是Module?(着急可不看) 众所周知:现代宏内核架构的操作系统都会借鉴微内核…