首页 > 编程语言 >STM32F407单片机编程入门(九)低功耗模式实战含源码

STM32F407单片机编程入门(九)低功耗模式实战含源码

时间:2024-09-20 19:48:20浏览次数:12  
标签:CODE HAL 引脚 低功耗 模式 单片机 源码 待机 PWR

文章目录

一.概要

在生活中通过关掉电器组件可以实现省电节能的目的,同样的道理单片机也可以通过这种方法实现降低功耗。单片机是由许多部件组成,一些组件的电源系统是独立的,可以通过关闭单片机内部的组件的电压,可以实现降低功耗。

二.STM32单片机低功耗基本介绍

STM32提供了一些低功耗模式。默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下,HCLK 为CPU提供时钟,并执行程序代码。当 CPU 不需要继续运行(例如等待外部事件) 时,可以利用多种低功耗模式来节省功耗。

STM32F407单片机提供了多种功耗模式,以达到不同层次的降低功耗的目的:
• 睡眠模式 (内核停止工作,外设仍在运行)
• 停止模式 (所有时钟都停止)
• 待机模式 ( 1.2 V 内核电源关闭)

在这里插入图片描述
WFI和WFE都是系统指令,WFI是表示中断,WFE表示事件。

睡眠模式:
仅关闭了内核时钟,内核停止运行,但其片上外设,CM4 核心的外设全都照常运行,在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。

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

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

停止模式退出:
当一个中断或唤醒事件会退出停止模式。

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

待机模式退出:
WKUP引脚的上升沿、RTC闹钟事件的上升沿、NRST引脚上外部复位、IWDG复位可以退出待机模式。

三.STM32F407单片机待机模式介绍

待机模式下可达到最低功耗。待机模式基于 Cortex™-M4F 深度睡眠模式,其中调压器被禁 止。因此 1.2 V 域断电。PLL、HSI 振荡器和 HSE 振荡器也将关闭。除备份域(RTC 寄存器、RTC 备份寄存器和备份 SRAM)和待机电路中的寄存器外,SRAM 和寄存器内容都将丢失。

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

在待机模式下,所有的I/O引脚处于高阻态,除了以下的引脚:
● 复位引脚(始终有效)
● 当被设置为防侵入或校准输出时的TAMPER引脚
● 被使能的唤醒引脚
● RTC和IWDG(如果开启)继续运行。

四.CubeMX配置一个待机低功耗例程

STLINK接STM32F407VET6开发板,STLINK接电脑USB口。用万用表的电流档,串联到开发板的5V插针供电中。

在这里插入图片描述
在这里插入图片描述

打开STM32CubeMX软件,新建工程
在这里插入图片描述
Part Number处输入STM32F407VE,再双击就创建新的工程
在这里插入图片描述

配置下载口引脚
在这里插入图片描述

配置外部晶振引脚
在这里插入图片描述

可以查看STM32F407VET6开发板原理图,PB4连接LED灯,所以配置PB4为GPIO输出

在这里插入图片描述

配置系统主频168Mhz,使用外部晶振
在这里插入图片描述

配置工程文件名,保存路径,KEIL5工程输出方式
在这里插入图片描述

生成工程
在这里插入图片描述

用Keil5打开工程
在这里插入图片描述

添加代码

在这里插入图片描述

void StandbyMode_Measure(void)
{
  /* Enable Power Clock*/
  __HAL_RCC_PWR_CLK_ENABLE();

  /* Allow access to Backup */
  HAL_PWR_EnableBkUpAccess();

  /* Reset RTC Domain */
  __HAL_RCC_BACKUPRESET_FORCE();
  __HAL_RCC_BACKUPRESET_RELEASE();

  /* Disable all used wakeup sources: Pin1(PA.0) */
  HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);

  /* Clear all related wakeup flags */
  __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);

  /* Re-enable all used wakeup sources: Pin1(PA.0) */
  HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);//使能唤醒引脚

  /* Request to enter STANDBY mode  */
  HAL_PWR_EnterSTANDBYMode();//进入待机模式
}
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();//初始化1毫秒 Tick

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();//外部8M晶振,系统168M主频

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */
    for(int i=0;i<50;i++)
    {
			HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4);//PB4引脚翻转输出
			HAL_Delay(200);//等待100ms
    }
		
	__HAL_RCC_PWR_CLK_ENABLE();
  /* Check and handle if the system was resumed from StandBy mode */
  if(__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET)//清除标志
  {
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);  
  }
	StandbyMode_Measure();//进入待机模式
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	
  }
  /* USER CODE END 3 */
}

实验效果

STM32单片机进入低功耗前,板子功耗是47mA左右
在这里插入图片描述

10秒之后,STM32单片机进入待机状态,板子功耗是5.94mA左右,功耗降的比较明显,说明进入待机状态,然后按下唤醒按键(WKUP),板子又进入重新运行状态。
在这里插入图片描述

五.CubeMX工程源代码下载

通过网盘分享的文件:10.低功耗实验.zip
链接: https://pan.baidu.com/s/1Q6Y1dsE5nuWTxt5I3zQYIQ 提取码: 61w8
如果链接失效,可以联系博主给最新链接
程序下载下来之后解压就行

六.小结

STM32单片机支持多种低功耗模式,‌包括睡眠模式、‌待机模式等,‌这些模式通过降低时钟频率、‌禁用外设和进入深度睡眠状态来实现节能。‌通过仔细选择和配置这些模式,‌可以显著减少功耗,‌从而延长设备的续航时间。‌

标签:CODE,HAL,引脚,低功耗,模式,单片机,源码,待机,PWR
From: https://blog.csdn.net/zy2232652/article/details/142384333

相关文章

  • [附源码]图书借阅管理系统+SpringBoot+Vue前后端分离
    今天带来一款优秀的项目:图书借阅管理系统源码 。系统采用的流行的前后端分离结构,内含功能包括"系统权限角色",“登录,注册”,“图书管理”,“借阅管理”,“图书类别管理”,“系统账号管理”。如果您有任何问题,也请联系小编,小编是经验丰富的程序员!一.系统演示视频 https:......
  • opencascade Bnd_Range源码学习区间计算
    opencascadeBnd_Range前言这个类描述了由两个实数值限定的1D空间中的区间。一个区间可以是无效的,这表示区间中不包含任何点。方法1默认构造函数。创建一个无效区间。Bnd_Range();2构造函数。创建最小最大值区间Bnd_Range(constStandard_RealtheMin,constStandar......
  • 基于JSP客户关系管理系统的设计与实现的计算机毕设源码+论文
    摘要:本客户关系管理系统是使用JSP编程语言和SQLServer2000数据库共同来完成的,采用面向对象方法,对客户关系管理系统进行设计与实现。分析设计了客户关系管理系统的静态模型和动态模型,完成了系统开发的分析、设计和实现的工作。本客户关系管理系统通过Web方式完成用户与系统的交互,系......
  • 首码邀请码拉新注册锁码排单系统源码开发
    首码邀请码拉新注册锁码排单系统是一种用于管理用户邀请和注册的系统,通常应用于需要通过邀请机制来控制新用户增长的应用场景。这种系统可以帮助平台更好地管理用户增长速度、防止恶意注册,并确保每个邀请码的有效性和唯一性。以下是对这种系统的源码开发案例进行分析一、系统概述首......
  • 相亲交友系统源码 连接你我,不再孤单
     在这个数字时代,人们的生活方式已经发生了巨大的变化。随着工作压力增大和社会竞争激烈化,很多人发现自己很难有时间和机会去结识新的朋友,更不用说找到适合自己的伴侣了。相亲交友系统正是在这种背景下应运而生,它不仅简化了交友过程,更为单身人士提供了一个广阔的平台,让他们有机会遇......
  • 配送跑腿小程序源码大揭秘:快速部署你的服务平台
    在配送跑腿行业的快速发展中,开发一款专属的小程序可以为您的业务带来显著提升。如何借助现成的源码进行快速开发和部署,构建高效的配送服务平台?本文将为您揭秘配送跑腿小程序的源码结构,并通过代码示例,帮助您轻松实现功能部署和业务上线。一、源码开发的核心优势使用开源代码可以显著......
  • 上门安装维修服务预约平台源码开发
    预约上门安装维修系统接单平台是一种为用户提供便捷的上门服务解决方案的应用。这种系统通常用于家电维修、家具安装、家政服务等领域,通过线上预约、派单、跟踪等流程,提高服务效率和用户体验。开发编辑wcz9563以下是对该设计的详细解析以下是对该系统的开发案例解析和源码示例。一......
  • 链动2+1模式系统发源码之区域代理架构设计与功能解析
    链动2+1模式系统开发源码中的区域代理设计,主要围绕行政区划分的省、市、区代理机制进行构建,旨在通过这一机制促进线上线下的融合,提升区域市场的覆盖。以下是对该设计的详细解析一、区域代理的设立与获取方式1. 设立原则:区域代理分为省级代理、市级代理和区县代理,每个级别均基于行......
  • 从源码看透 Ptmalloc:堆内存分配与释放的背后
    ......
  • UWB无线载波通信技术详解!【UWB人员定位系统源码】
    简介超宽带(UltraWideBand,UWB)技术是一种无线载波通信技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。尽管使用无线通信,但其数据传输速率可以达到几百兆比特每秒以上。使用UWB技术可在非常宽的带宽上传输信号,美国联邦通信委员会(FCC)对UWB技......