使用芯片===>STM32F429IGT6

(制作不易,希望大佬能给个赞支持下小丁)


目录

一、低功耗模式简介

1、STM32的3种低功耗模式:

2、在运行模式下降低功耗

3、待机模式详解

4、相关寄存器

二、低功耗

1、HAL库中低功耗操作函数

2、待机唤醒配置步骤

三、待机唤醒实验

1、实验内容

2、实验程序

3、实验结果

四、结束语


一、低功耗模式简介

很多单片机有低功耗模式,STM32也不例外。在系统或者电源复位后,微控制器出于运行状态之下,HCLK为CPU提供时钟,内核执行代码。当CPU不需要继续运行时,可以利用多种低功耗模式来节省功耗,例如等待某个事件触发。

1、STM32的3种低功耗模式:

低功耗模式汇总:

​①、睡眠模式:内核停止,外设如NVIC,系统时钟Systick仍运行。

②、停止模式:所有时钟都已停止。1.2/1.8V内核电源工作。

PLL,HIS和HSE RC振荡器功能禁止。

寄存器和SRAM内容保留。

③、待机模式:1.2/1.8V内核电源关闭。

只有备份寄存器和待机电路维持供电。

寄存器和SRAM内容全部丢失。实现最低功耗。

2、在运行模式下降低功耗

①、降低系统时钟速度

②、不使用 APBx 和 AHBx 外设时,将对应的外设时钟关闭

3、待机模式详解

​一般情况下,用户根据最低电源消耗,最快启动时间和可用的唤醒源等条件,选择一种最佳的低功耗模式。

4、相关寄存器

①、PWR_CR电源控制寄存器

设置PDDS位进入深度睡眠时进入待机模式。

设置CWUF位,清除之前的WUF唤醒位。

②、PWR_CSR电源控制/状态寄存器

​设置EWUP,使能WKUP 引脚用于待机唤醒。

WUF唤醒标志,用来判断是否发生唤醒事件。

③、特别说明(对M4和M7)


二、低功耗

1、HAL库中低功耗操作函数

void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry);//停止模式
void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry);//睡眠模式
void HAL_PWR_EnterSTANDBYMode(void);//待机模式
void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinPolarity);//使能唤醒模式

2、待机唤醒配置步骤

①、使能电源时钟。     因为要配置电源控制寄存器,所以必须先使能电源时钟。

__HAL_RCC_PWR_CLK_ENABLE();         //使能PWR时钟

② 、RTC相关处理:关闭RTC相关中断。

③、设置WK_UP引脚作为唤醒源。

设置PWR_CSR的EWUP位,使能WK_UP用于将CPU从待机模式唤醒。

void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinPolarity)

④、设置SLEEPDEEP位,设置PDDS位,执行WFI指令,进入待机模式。

void HAL_PWR_EnterSTANDBYMode();


三、待机唤醒实验

1、实验内容

①、PA0引脚即WakeUp引脚,来控制待机和唤醒模式切换。

②、长按3秒进入待机模式,在待机模式下,长按3秒待机唤醒。

③、主程序主要实现着持续串口输出数据。

④、在待机模式下,数据不会输出出去。

⑤、唤醒后输出数据。

2、实验程序

main.c

/**************************************************************************
**作者:        小丁工程
**时间:        2021.01.18
***************************************************************************/
#include "sys.h"
//---------------------主函数-------------------------------------------------int main(void)
{   int a;HAL_Init();//========================初始化HAL库   Stm32_Clock_Init(360,25,2,8);//======设置时钟,180Mhzdelay_init(180);//===================初始化延时函数WKUP_Init();//=======================待机唤醒初始化uart_init(115200);//=================初始化串口LED_Init();//=========================LED初始化while(1){   a++;printf("===%d===\r\n",a);if(a==10000){a=0;}delay_ms(20);}
}
//---------------------end-----------------------------------------------------

wkup.c

#include "wkup.h"//系统进入待机模式
void Sys_Enter_Standby(void)
{__HAL_RCC_AHB1_FORCE_RESET();       //复位所有IO口 while(WKUP_KD);                     //等待WK_UP按键松开(在有RTC中断时,必须等WK_UP松开再进入待机)__HAL_RCC_PWR_CLK_ENABLE();         //使能PWR时钟__HAL_RCC_BACKUPRESET_FORCE();      //复位备份区域HAL_PWR_EnableBkUpAccess();         //后备区域访问使能  //STM32F4,当开启了RTC相关中断后,必须先关闭RTC中断,再清中断标志位,然后重新设置//RTC中断,再进入待机模式才可以正常唤醒,否则会有问题.   __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);__HAL_RTC_WRITEPROTECTION_DISABLE(&RTC_Handler);//关闭RTC写保护//关闭RTC相关中断,可能在RTC实验打开了__HAL_RTC_WAKEUPTIMER_DISABLE_IT(&RTC_Handler,RTC_IT_WUT);__HAL_RTC_TIMESTAMP_DISABLE_IT(&RTC_Handler,RTC_IT_TS);__HAL_RTC_ALARM_DISABLE_IT(&RTC_Handler,RTC_IT_ALRA|RTC_IT_ALRB);//清除RTC相关中断标志位__HAL_RTC_ALARM_CLEAR_FLAG(&RTC_Handler,RTC_FLAG_ALRAF|RTC_FLAG_ALRBF);__HAL_RTC_TIMESTAMP_CLEAR_FLAG(&RTC_Handler,RTC_FLAG_TSF); __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&RTC_Handler,RTC_FLAG_WUTF);__HAL_RCC_BACKUPRESET_RELEASE();                    //备份区域复位结束__HAL_RTC_WRITEPROTECTION_ENABLE(&RTC_Handler);     //使能RTC写保护__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);                  //清除Wake_UP标志HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);           //设置WKUP用于唤醒HAL_PWR_EnterSTANDBYMode();                         //进入待机模式
}//检测WKUP脚的信号
//返回值1:连续按下3s以上
//      0:错误的触发
u8 Check_WKUP(void)
{u8 t=0;u8 tx=0;//记录松开的次数LED0=0; //亮灯DS0 while(1){if(WKUP_KD)//已经按下了{t++;tx=0;}else {tx++; if(tx>3)//超过90ms内没有WKUP信号{LED0=1;return 0;//错误的按键,按下次数不够}}delay_ms(30);if(t>=100)//按下超过3秒钟{LED0=0;    //点亮DS0 return 1; //按下3s以上了}}
}  //外部中断线0中断服务函数
void EXTI0_IRQHandler(void)
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
}//中断线0中断处理过程
//此函数会被HAL_GPIO_EXTI_IRQHandler()调用
//GPIO_Pin:引脚
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(GPIO_Pin==GPIO_PIN_0)//PA0{if(Check_WKUP())//关机{Sys_Enter_Standby();//进入待机模式}}
}//PA0 WKUP唤醒初始化
void WKUP_Init(void)
{GPIO_InitTypeDef GPIO_Initure;__HAL_RCC_GPIOA_CLK_ENABLE();            //开启GPIOA时钟GPIO_Initure.Pin=GPIO_PIN_0;            //PA0GPIO_Initure.Mode=GPIO_MODE_IT_RISING;  //中断,上升沿GPIO_Initure.Pull=GPIO_PULLDOWN;        //下拉GPIO_Initure.Speed=GPIO_SPEED_FAST;     //快速HAL_GPIO_Init(GPIOA,&GPIO_Initure);//检查是否是正常开机if(Check_WKUP()==0){Sys_Enter_Standby();//不是开机,进入待机模式}HAL_NVIC_SetPriority(EXTI0_IRQn,0x02,0x02);//抢占优先级2,子优先级2HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}

wkup.h

#ifndef __WKUP_H
#define __WKUP_H
#include "sys.h"#define WKUP_KD HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)  //PA0 检测是否外部WK_UP按键按下u8 Check_WKUP(void);             //检测WKUP脚的信号
void WKUP_Init(void);           //PA0 WKUP唤醒初始化
void Sys_Enter_Standby(void);   //系统进入待机模式
#endif

3、实验结果

①、程序开始为待机状态,下载成功后没有数据输出。

②、长按WakeUp按键3s后,程序输出。

③、再长按WakeUp按键3s后,程序停止。

④、再次长按WakeUp按键3s后,程序从头输出。


四、结束语

低功耗在生活中非常重要,希望能帮助到你。

例程及相关资料参考于

原子光盘、《STM32F4xx中文参考手册》-第x章 低功耗模式

侵删

PWR-低功耗模式-STM32F4相关推荐

  1. STM32CubeMX学习笔记(15)——电源管理(PWR)低功耗睡眠模式

    一.低功耗模式简介 系统提供了多个低功耗模式,可在 CPU 不需要运行时(例如等待外部事件时)节省功耗.由用户根据应用选择具体的低功耗模式,以在低功耗.短启动时间和可用唤醒源之间寻求最佳平衡. 睡眠模 ...

  2. STM32CubeMX学习笔记(16)——电源管理(PWR)低功耗停止模式

    一.低功耗模式简介 系统提供了多个低功耗模式,可在 CPU 不需要运行时(例如等待外部事件时)节省功耗.由用户根据应用选择具体的低功耗模式,以在低功耗.短启动时间和可用唤醒源之间寻求最佳平衡. 睡眠模 ...

  3. STM32CubeMX学习笔记(17)——电源管理(PWR)低功耗待机模式

    一.低功耗模式简介 系统提供了多个低功耗模式,可在 CPU 不需要运行时(例如等待外部事件时)节省功耗.由用户根据应用选择具体的低功耗模式,以在低功耗.短启动时间和可用唤醒源之间寻求最佳平衡. 睡眠模 ...

  4. 【STM32】【STM32CubeMX】STM32CubeMX的使用之八:低功耗模式及MCU唤醒

    文章目录 0.前言 1.低功耗模式简介 2.CubeMX设置 3.软件设计   下载工程文件:   https://gitee.com/Joseph_Cooper/stm32-cube-mx-stm3 ...

  5. STM32低功耗模式测试

    stm32单片机低功耗模式共有3种,下来对3种低功耗进行分析测试. 先看手册上相关低功耗资料介绍: 先来分析睡眠模式: 进入睡眠模式比较简单,只需一条指令即可.唤醒睡眠模式,我们使用串口中断来唤醒,通 ...

  6. 32怎么通过一个按键实现不同工作模式_stm32几种低功耗模式的实现和差别

    点击上方蓝字关注我哦- 01 前言 按功耗由高到低排列,STM32具有运行.睡眠.停止和待机四种工作模式.上电复位后 STM32 处于运行状态,当内核不需要继续运行,就可以选择进入后面的三种低功耗模式 ...

  7. RISC-V MCU应用教程之PWR睡眠模式

    简介 CH32V103系列是以青稞V3A处理器为核心的32位通用MCU,该处理器是基于RISC-V开源指令集设计.片上集成了时钟安全机制.多级电源管理.通用DMA控制器.此系列具有1路USB2.0主机 ...

  8. STM32开发 -- 低功耗模式详解

    很多单片机都有低功耗模式,STM32 也不例外.当 CPU 不需继续运行时,可以利用多个低功耗模式来节省功耗. 这部分不是我负责,但是也是有必要看一下的. 参看: STM32F1开发指南-库函数版本_ ...

  9. STM32-(33):低功耗模式与唤醒

    上一篇:STM32-(32):窗口看门狗 下一篇:STM32-(34):DMA传输控制(理论) 功耗管理 很多单片机都有低功耗模式,STM32也不例外.在系统或电源复位以后,微控制器处于运行状态.运行 ...

  10. STM32MX电源管理低功耗模式

    前言: ST官方例程:(直接移植直接用,接口是现成的) 在你STM32Cube固件库安装路径下. .\..\STM32Cube\Repository\STM32Cube_FW_F4_V1.23.0\P ...

最新文章

  1. mysql計劃任務_MySQL計劃任務 | 學步園
  2. 如何安装apache服务器最新,云服务器如何安装apache
  3. 这个第三方登录开源工具,支持市面上几乎所有主流平台!好用!
  4. 全能无线渗透测试工具,一个LAZY就搞定了
  5. 《系统集成项目管理工程师》必背100个知识点-51项目人力资源管理
  6. 温州大学《深度学习》课程课件(六、机器学习实践)
  7. boost::detail::reference_content的用法测试程序
  8. 【传智播客】Javaweb程序设计任务教程 黑马程序员 第三章 课后答案
  9. eclipse下如何打开被关闭的项目_如何在Windows 10中打开和关闭平板电脑模式
  10. 分布式Redis的分布式锁 Redlock
  11. 由项目中的一个小问题所联想到的。
  12. 响应式图像对齐中心引导3
  13. 【Java程序设计】异常处理
  14. FileZillaServer创建FTP服务器
  15. u盘提示需要格式化?怎么实现数据恢复?
  16. C语言(二十三)auto自动变量
  17. 微信小程序的环境准备
  18. scrapy爬虫折腾系列-02
  19. Work with Hans
  20. 一个英语学渣是如何通过英语六级的

热门文章

  1. 工业相机镜头选型实例及知识讲解
  2. c语言的split字符串分割(函数strtok)
  3. 20829-55-4,cyclo-(L-Trp-L-Trp),cyclo-L-tryptophan-L-tryptophan,cyclo(Trp-Trp)
  4. vga接口和hdmi接口的区别
  5. 低功耗蓝牙中的蓝牙地址和隐私
  6. win7开不了机按f8修复计算机没反应,win7开不了机按f8没用怎么办
  7. 每日一结(10.26)
  8. 桃李的修行小结【转】
  9. 我的小感悟(个人愚见)
  10. phalcon mysql_PHP-Phalcon框架中的数据库操作