stm32专题三十一:电源管理实现低功耗

这篇具有很好参考价值的文章主要介绍了stm32专题三十一:电源管理实现低功耗。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

stm32功耗管理,stm32,嵌入式硬件,单片机

stm32功耗管理,stm32,嵌入式硬件,单片机这个滞回电压,是为了让单片机容忍一定程度的电压波动,而不是只要电压稍微一变化,就立刻掉电复位。

stm32功耗管理,stm32,嵌入式硬件,单片机为了方便进行电源管理,STM32 把它的外设、内核等模块跟据功能划分了供电区域,其内部电源区域划分如图:

stm32功耗管理,stm32,嵌入式硬件,单片机

CPU内核为1.8V供电,以降低功耗,整个1.8V供电区域由电压调节器单独供电,有时CPU可以休眠,有时可以不休眠,这是由电压调节器来提供的。 

stm32功耗管理,stm32,嵌入式硬件,单片机

stm32功耗管理,stm32,嵌入式硬件,单片机

stm32功耗模式        

按功耗由高到低排列,STM32 具有运行、睡眠、停止和待机四种工作模式。上电复位后 STM32处于运行状态时,当内核不需要继续运行,就可以选择进入后面的三种低功耗模式降低功耗,这三种模式中,电源消耗不同、唤醒时间不同、唤醒源不同,用户需要根据应用需求,选择最佳的低功耗模式。三种低功耗的模式说明见下表。

睡眠模式下,任何中断都可以唤醒内核,外部 / 内部高速时钟保持打开,调压器保持打开,因此,内核只要被唤醒,就能马上正常的执行程序(优点:响应速度快;缺点:功耗比较大);

停止模式下,HSE和HSI被关闭,调压器可选开启或低功耗模式(若选为低功耗模式,则还需要加上调压器从低功耗切换至正常模式下的时间),外部中断唤醒内核。当内核被唤醒时,需要重新配置系统时钟使用外部 HSE 且 PLL 正常倍频(System_Init函数),这个过程就会消耗一定时间;否则程序会直接使用 HSI(不倍频) = 8MHz 作为系统时钟,此时系统运行的相当慢,一些对时钟要求较高的函数配置会无法运行(优点:功耗较小;缺点:需要重新配置系统时钟,响应速度慢);

待机模式下,整个1.8V供电区域被关闭,调压器被关闭,只能特定方式唤醒。唤醒之后程序从最开始(启动文件)执行(优点:功耗最低;缺点,每次都是复位执行);

stm32功耗管理,stm32,嵌入式硬件,单片机

stm32功耗管理,stm32,嵌入式硬件,单片机

3种模式的详细描述和寄存器配置 

stm32功耗管理,stm32,嵌入式硬件,单片机

内核寄存器配置说明如下:

stm32功耗管理,stm32,嵌入式硬件,单片机 关于立即睡眠和退出后睡眠的区别(中文参考手册):

stm32功耗管理,stm32,嵌入式硬件,单片机

stm32功耗管理,stm32,嵌入式硬件,单片机stm32功耗管理,stm32,嵌入式硬件,单片机

开启后会默认使用HSI作为系统时钟,通常我们为确保正常使用,还要重新开启HSE: 

相关的寄存器配置:

stm32功耗管理,stm32,嵌入式硬件,单片机

电源控制寄存器,配置停止模式(正常 or 低功耗):

stm32功耗管理,stm32,嵌入式硬件,单片机

stm32功耗管理,stm32,嵌入式硬件,单片机 相关的寄存器配置:

stm32功耗管理,stm32,嵌入式硬件,单片机

电源管理库函数 

stm32功耗管理,stm32,嵌入式硬件,单片机

1 配置PVD检测函数 PWR_PVDLevelConfig ,其实就是写入PWR_CR寄存器的这几位:

 stm32功耗管理,stm32,嵌入式硬件,单片机

标准库函数源码:

/**
  * @brief  Configures the voltage threshold detected by the Power Voltage Detector(PVD).
  * @param  PWR_PVDLevel: specifies the PVD detection level
  *   This parameter can be one of the following values:
  *     @arg PWR_PVDLevel_2V2: PVD detection level set to 2.2V
  *     @arg PWR_PVDLevel_2V3: PVD detection level set to 2.3V
  *     @arg PWR_PVDLevel_2V4: PVD detection level set to 2.4V
  *     @arg PWR_PVDLevel_2V5: PVD detection level set to 2.5V
  *     @arg PWR_PVDLevel_2V6: PVD detection level set to 2.6V
  *     @arg PWR_PVDLevel_2V7: PVD detection level set to 2.7V
  *     @arg PWR_PVDLevel_2V8: PVD detection level set to 2.8V
  *     @arg PWR_PVDLevel_2V9: PVD detection level set to 2.9V
  * @retval None
  */
void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel)
{
  uint32_t tmpreg = 0;
  /* Check the parameters */
  assert_param(IS_PWR_PVD_LEVEL(PWR_PVDLevel));
  tmpreg = PWR->CR;
  /* Clear PLS[7:5] bits */
  tmpreg &= CR_PLS_MASK;
  /* Set PLS[7:5] bits according to PWR_PVDLevel value */
  tmpreg |= PWR_PVDLevel;
  /* Store the new value */
  PWR->CR = tmpreg;
}

2 WFI 与 WFE 命令:

/* ###################  Compiler specific Intrinsics  ########################### */
 
#if defined ( __CC_ARM   ) /*------------------RealView Compiler -----------------*/
/* ARM armcc specific functions */
 
#define __enable_fault_irq                __enable_fiq
#define __disable_fault_irq               __disable_fiq
 
#define __NOP                             __nop
#define __WFI                             __wfi
#define __WFE                             __wfe
#define __SEV                             __sev
#define __ISB()                           __isb(0)
#define __DSB()                           __dsb(0)
#define __DMB()                           __dmb(0)
#define __REV                             __rev
#define __RBIT                            __rbit
#define __LDREXB(ptr)                     ((unsigned char ) __ldrex(ptr))
#define __LDREXH(ptr)                     ((unsigned short) __ldrex(ptr))
#define __LDREXW(ptr)                     ((unsigned int  ) __ldrex(ptr))
#define __STREXB(value, ptr)              __strex(value, ptr)
#define __STREXH(value, ptr)              __strex(value, ptr)
#define __STREXW(value, ptr)              __strex(value, ptr)

stm32功耗管理,stm32,嵌入式硬件,单片机 3 进入停止模式

stm32功耗管理,stm32,嵌入式硬件,单片机

配置PWR_CR寄存器的这两个位,以及SLEEPDEEP位。

stm32功耗管理,stm32,嵌入式硬件,单片机

/**
* @brief 进入停止模式
*
* @note 在停止模式下所有 I/O 的会保持在停止前的状态
* @note 从停止模式唤醒后,会使用 HSI 作为时钟源
* @note 调压器若工作在低功耗模式,可减少功耗,但唤醒时会增加延迟
* @param PWR_Regulator: 设置停止模式时调压器的工作模式
* @arg PWR_MainRegulator_ON: 调压器正常运行
* @arg PWR_Regulator_LowPower: 调压器低功耗运行
* @param PWR_STOPEntry: 设置使用 WFI 还是 WFE 进入停止模式
* @arg PWR_STOPEntry_WFI: WFI 进入停止模式
* @arg PWR_STOPEntry_WFE: WFE 进入停止模式
* @retval None
*/
void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry)
{
	 uint32_t tmpreg = 0;
	 /* 检查参数 */
	 assert_param(IS_PWR_REGULATOR(PWR_Regulator));
	 assert_param(IS_PWR_STOP_ENTRY(PWR_STOPEntry));
	
	 /* 设置调压器的模式 ------------*/
	 tmpreg = PWR->CR;
	 /* 清除 PDDS 及 LPDS 位 */
	 tmpreg &= CR_DS_MASK;
	 /* 根据 PWR_Regulator 的值(调压器工作模式)配置 LPDS,MRLVDS 及 LPLVDS 位*/
	 tmpreg |= PWR_Regulator;
	 /* 写入参数值到寄存器 */
	 PWR->CR = tmpreg;
	 /* 设置内核寄存器的 SLEEPDEEP 位 */
	 SCB->SCR |= SCB_SCR_SLEEPDEEP;
	
	 /* 设置进入停止模式的方式-----------------*/
	 if (PWR_STOPEntry == PWR_STOPEntry_WFI) {
	 /* 需要中断唤醒 */
	 __WFI();
	 } else {
	 /* 需要事件唤醒 */
	 __WFE();
	 }
	
	 /* 以下的程序是当重新唤醒时才执行的,清除 SLEEPDEEP 位的状态 */
	 SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP);
}

 在执行最后一句代码前,系统由于调用了__WFI 或 __WFE,已经进入了停止模式,因此,这句清除SLEEPDEEP 位并不会执行。而当内核重新被唤醒时,才会清除SLEEPDEEP位,方便使用。

stm32功耗管理,stm32,嵌入式硬件,单片机

4 进入待机模式文章来源地址https://www.toymoban.com/news/detail-830919.html

/**
* @brief 进入待机模式
* @note 待机模式时,除以下引脚,其余引脚都在高阻态:
* -复位引脚
* - RTC_AF1 引脚 (PC13) (需要使能侵入检测、时间戳事件或 RTC 闹钟事件)
* - RTC_AF2 引脚 (PI8) (需要使能侵入检测或时间戳事件)
* - WKUP 引脚 (PA0) (需要使能 WKUP 唤醒功能)
* @note 在调用本函数前还需要清除 WUF 寄存器位
* @param None
 * @retval None
 */
void PWR_EnterSTANDBYMode(void)
{
	/* 清除 Wake-up 标志 */
	PWR->CR |= PWR_CR_CWUF;
	/* 选择待机模式 */
	PWR->CR |= PWR_CR_PDDS;
	/* 设置内核寄存器的 SLEEPDEEP 位 */
	SCB->SCR |= SCB_SCR_SLEEPDEEP;
	/* 存储操作完毕时才能进入待机模式,使用以下语句确保存储操作执行完毕 */
	#if defined ( __CC_ARM )
	__force_stores();
	#endif
	/* 等待中断唤醒 */
	__WFI();
}

到了这里,关于stm32专题三十一:电源管理实现低功耗的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【正点原子STM32连载】第三十一章 待机模式实验 摘自【正点原子】APM32E103最小系统板使用指南

    1)实验平台:正点原子APM32E103最小系统板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420 3)全套实验源码+手册+视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 本章介绍APM32E103低功耗模式中的待机模式,进入待机模式后,MCU内部的电压调压器将断开1.3V电源域

    2024年01月22日
    浏览(38)
  • STM32学习笔记---电源管理

    1、电源管理简介          ~~~~~~~~                 电源对电子设备的重要性不言而喻,它是保证系统稳定运行的基础,而保证系统能稳定运行后,又有低功耗的要求。          ~~~~~~~~                 在很多应用场合中都对电子设备的功耗要求非常苛刻,如某些传感

    2024年02月05日
    浏览(31)
  • 专门针对数字电源相关应用,STM32G474CBT3/ STM32G474QET3/ STM32G474RBT3/ STM32G484CBT3带有DSP和FPU指令的混合信号MCU【嵌入式】

    STM32G4系列集成了运行于170 MHz的32位Arm® Cortex®-M4内核(支持FPU和DSP指令),以及3种不同的硬件加速器:ART Accelerator™、CCM-SRAM程序执行加速器,以及数学运算加速器。STM32G4系列还提供: 丰富的高级模拟外设(比较器、运算放大器、DAC) 支持硬件过采样的ADC(16位分辨率) 具

    2024年01月19日
    浏览(39)
  • stm32_电源管理(上)——理论讲解

    电源对电子设备的重要性不言而喻,它是保证系统稳定运行的基础,而保证系统能稳定运行后,又有低功耗的要求在很多应用场合中都对电子设备的功耗要求非常苛刻,如某些传感器信息采集设备,仅靠小型的电池提供电源,要求工作长达数年之久,且期间不需要任何维护。 由于智慧

    2024年01月21日
    浏览(36)
  • STM32CubeMX教程25 PWR 电源管理 - 睡眠、停止和待机模式

    开发板(正点原子stm32f407探索者开发板V2.4) STM32CubeMX软件(Version 6.10.0) 野火DAP仿真器 keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 XCOM V2.6串口助手 使用STM32CubeMX软件配置STM32F407开发板的 PWR电源管理,并了解STM32的睡眠、停止和待机模式 睡眠模式可以立即进入,也可以在退出优先级

    2024年02月19日
    浏览(27)
  • 【正点原子STM32】PVD低功耗实验 – 电源监控(POR/PDR监控器、PVD监控器、 BOR监控器、AVD监控器、VBAT阈值、温度阈值、PVD相关寄存器和HAL库驱动、PVD的使用步骤)

    一、STM32 电源监控介绍 1.1、上电/掉电复位POR/PDR(F1) 1.2、可编程电压检测器(PVD)(F1) 二、PVD相关寄存器介绍(F1) 三、PVD相关HAL库驱动介绍 四、PVD的使用步骤 五、编程实战 电源监控在STM32芯片中起着关键作用,确保系统在电源电压异常或不稳定时能够进行适当的处理,以

    2024年03月25日
    浏览(33)
  • 嵌入式毕设分享 stm32 RFID智能仓库管理系统(源码+硬件+论文)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(51)
  • stm32毕设分享 stm32实现车牌识别系统 -物联网 嵌入式 单片机

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(50)
  • stm32毕设分享 单片机自动写字机器人设计与实现 - 物联网 嵌入式 stm32

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年01月21日
    浏览(52)
  • 【STM32笔记】STM32的低功耗模式

      在嵌入式系统设计中,嵌入式系统被广泛的应用在便携式和移动性较强的产品,然而有一些产品并不都是有着充足的电源供应,为了尽可能地延长电池使用时间,这个时候就要考虑降低功率消耗了。   在系统或电源复位以后,微控制器处于运行的状态,当CPU不需要继续

    2024年02月01日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包