STM32电源管理实现低功耗

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

STM32电源管理简介

        电源对电子设备的重要性不言而喻,它是保证系统稳定运行的基础,而保证系统能稳定运行后,又有低功耗的要求。在很多应用场合中都对电子设备的功耗要求非常苛刻,如某些传感器信息采集设备,仅靠小型的电池提供电源,要求工作长达数年之久,且期间不需要任何维护;由于智慧穿戴设备的小型化要求,电池体积不能太大导致容量也比较小,所以也很有必要从控制功耗入手,提高设备的续行时间。STM32有专门的电源管理外设监控电源并管理设备的运行模式,确保系统正常运行,并尽量降低器件的功耗。

STM32电源管理实现低功耗,stm32开发,stm32,嵌入式硬件,单片机

STM32电源管理系统

STM32电源管理实现低功耗,stm32开发,stm32,嵌入式硬件,单片机

STM32的电源管理系统主要分为:

  • ①备份域
  • ②调压器供电电路
  • ③ADC电源电路

备份域电路

        STM32的备份域包括LSE振荡器、RTC、备份寄存器及备份SRAM这些器件,这部分的电路可以通过STM32的VBAT引脚获取供电电源,在实际应用中一般会使用3V的钮扣电池对该引脚供电。

STM32电源管理实现低功耗,stm32开发,stm32,嵌入式硬件,单片机

        在图中备份域电路的左侧有一个电源开关结构,它的功能类似图中的双二极管,在它的上方连接了VBAT电源,下方连接了VDD主电源(一般为3.3V),右侧引出到备份域电路中。当VDD主电源存在时,由于VDD电压较高,备份域电路通过VDD供电,当VDD掉电时,备份域电路由钮扣电池通过VBAT供电,保证电路能持续运行,从而可利用它保留关键数据

STM32电源管理实现低功耗,stm32开发,stm32,嵌入式硬件,单片机

调压器供电电路

        在STM32的电源系统中调压器供电的电路是最主要的部分,调压器为备份域及待机电路以外的所有数字电路供电,其中包括内核、数字外设以及RAM,调压器的输出电压约为1.2V,因而使用调压器供电的这些电路区域被称为1.2V域。        

STM32电源管理实现低功耗,stm32开发,stm32,嵌入式硬件,单片机

调压器可控制调节供电电路使系统运行在“运行模式”、“停止模式”以及“待机模式”下:

运行模式:调压器为 1.2 V 域(内核、存储器和数字外设)提供全功率。

停止模式:1.2V域运行在低功耗状态,1.2V区域的所有时钟都被关闭,相应的外设都停止了工作,但它会保留内核寄存器以及SRAM的内容;

待机模式:整个1.2V域都断电,该区域的内核寄存器及SRAM内容都会丢失(备份区域的寄存器及SRAM不受影响)。

STM32电源管理实现低功耗,stm32开发,stm32,嵌入式硬件,单片机

ADC电源控制电路

        为了提高转换精度,STM32的ADC配有独立的电源接口,方便进行单独的滤波。ADC的工作电源使用VDDA引脚输入,使用VSSA作为独立的地连接,VREF引脚则为ADC提供测量使用的参考电压。

STM32电源管理实现低功耗,stm32开发,stm32,嵌入式硬件,单片机

STM32低功耗模式

        很多单片机都有低功耗模式,STM32F4也不例外 ,运行状态下的HCLK为 CPU提供时钟,内核执行程序代码。当 CPU不需继续运行时,可以利用多个低功耗模式来节省功耗,例如等待某个外部事件时。

        STM32F4按功耗由高到低排列具有运行、睡眠、停止和待机四种工作模式。

        上电复位后STM32处于运行状态时,当内核不需要继续运行,就可以选择进入后面的三种低功耗模式降低功耗,这三种模式中,电源消耗不同、唤醒时间不同、唤醒源不同,用户需要根据应用需求,选择最佳的低功耗模式。这三种低功耗模式层层递进,运行的时钟或芯片功能越来越少,因而功耗越来越低。

STM32实现睡眠模式

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

        有两种方式进入睡眠模式,它的进入方式决定了从睡眠唤醒的方式,分别是WFI(waitforinterrupt)和WFE(waitforevent),即由等待“中断”唤醒和由“事件”唤醒。睡眠模式的各种特性见下表

STM32电源管理实现低功耗,stm32开发,stm32,嵌入式硬件,单片机

电气原理图

STM32电源管理实现低功耗,stm32开发,stm32,嵌入式硬件,单片机

STM32电源管理实现低功耗,stm32开发,stm32,嵌入式硬件,单片机

cubemx配置

因为蜂鸣器是无源蜂鸣器,所以需要用到PWM

STM32电源管理实现低功耗,stm32开发,stm32,嵌入式硬件,单片机

STM32电源管理实现低功耗,stm32开发,stm32,嵌入式硬件,单片机

代码实现

主函数

	HAL_TIM_PWM_Start(&htim10, TIM_CHANNEL_1);
	printf("usart is init\n");
	HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8, GPIO_PIN_SET);
	
  while (1)
  {
		HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8, GPIO_PIN_RESET);	
		printf("程序正常运行\n");
		
		HAL_Delay(2000);
		HAL_SuspendTick();//关闭systick中断,否则会被中断唤醒
		printf("系统进入睡眠模式\n");
		HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8, GPIO_PIN_SET);//指示灯灭掉表示睡眠模式
		HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);//进入睡眠模式
		
		printf("系统已经被唤醒\n");
    }    

中断函数

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_0)
	{
		
		HAL_ResumeTick();
		__HAL_TIM_SetCompare(&htim10, TIM_CHANNEL_1, 10);//蜂鸣器响一下
		HAL_Delay(200);
		__HAL_TIM_SetCompare(&htim10, TIM_CHANNEL_1, 0);	
		
	}
	
}

 实验现象为:上电后指示灯亮,串口打印,两秒后进入睡眠模式,使用按键中断唤醒进入中断,然后继续执行函数

STM32电源管理实现低功耗,stm32开发,stm32,嵌入式硬件,单片机

STM32实现停止模式

        在停止模式中,进一步关闭了其它所有的时钟,于是所有的外设都停止了工作,但由于其1.2V区域的部分电源没有关闭,还保留了内核的寄存器、内存的信息。

        所以从停止模式唤醒,并重新开启时钟后,还可以从上次停止处继续执行代码。停止模式可以由任意一个外部中断(EXTI)唤醒。在停止模式中可以选择电压调节器为开模式或低功耗模式,可选择内部FLASH工作在正常模式或掉电模式。

STM32电源管理实现低功耗,stm32开发,stm32,嵌入式硬件,单片机

代码实现

主函数

	HAL_TIM_PWM_Start(&htim10, TIM_CHANNEL_1);
	printf("usart is init\n");
	HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8, GPIO_PIN_SET);

	while (1)
  {
		HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8, GPIO_PIN_RESET);	
		printf("程序正常运行\n");
		
		HAL_Delay(2000);
		
		printf("系统进入停止模式\n");
		
		HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8, GPIO_PIN_SET);//指示灯灭掉表示睡眠模式
		HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);//进入停止模式
		
		printf("系统已经被唤醒\n");
    }    

中断函数

CLK_Resume是自己编写的时钟唤醒函数,需要重新设置时钟

void CLK_Resume(void)
{
	//使能HSE
	__HAL_RCC_HSE_CONFIG(RCC_HSE_ON);//打开HSE
	while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET);
	//使能PLL
	__HAL_RCC_PLL_ENABLE();//打开PLL
	while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET);
	//选择PLL作为时钟源
	__HAL_RCC_SYSCLK_CONFIG(RCC_SYSCLKSOURCE_PLLCLK);
	while(__HAL_RCC_GET_SYSCLK_SOURCE() != 0x08);
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_0)
	{
		CLK_Resume();//恢复系统时钟HSE
		
		__HAL_TIM_SetCompare(&htim10, TIM_CHANNEL_1, 10);//蜂鸣器响一下
		HAL_Delay(200);
		__HAL_TIM_SetCompare(&htim10, TIM_CHANNEL_1, 0);	
		
	}
	
}

 

STM32实现待机模式

        待机模式,它除了关闭所有的时钟,还把1.2V区域的电源也完全关闭了,也就是说,从待机模式唤醒后,由于没有之前代码的运行记录,只能对芯片复位,重新检测boot条件,从头开始执行程序。它有四种唤醒方式,分别是WKUP(PA0)引脚的上升沿,RTC闹钟事件,NRST引脚的复位和IWDG(独立看门狗)复位。

STM32电源管理实现低功耗,stm32开发,stm32,嵌入式硬件,单片机

代码实现 

	HAL_TIM_PWM_Start(&htim10, TIM_CHANNEL_1);
	printf("usart is init\n");
	HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8, GPIO_PIN_SET);
	
  while (1)
  {
		HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8, GPIO_PIN_RESET);	
		printf("程序正常运行\n");
		
		HAL_Delay(2000);
		printf("系统进入待机模式\n");
		HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8, GPIO_PIN_SET);//指示灯灭掉表示睡眠模式
		HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);//使能唤醒引脚
		__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);//标志位为1,表示需要去唤醒
		HAL_PWR_EnterSTANDBYMode();
		
		printf("系统已经被唤醒\n");
    }

 中断函数

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_0)
	{
		
		__HAL_TIM_SetCompare(&htim10, TIM_CHANNEL_1, 10);//蜂鸣器响一下
		HAL_Delay(200);
		__HAL_TIM_SetCompare(&htim10, TIM_CHANNEL_1, 0);	
		
	}
	
}

实验现象:待机模式被唤醒后,无法继续执行之前的代码,重新复位从头开始执行程序文章来源地址https://www.toymoban.com/news/detail-827608.html

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

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

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

相关文章

  • STM32F4+FreeRTOS+LVGL实现嵌入式快速开发(缝合怪)

    极速进行项目开发,只需要懂一款芯片架构+一个操作系统+一个GUI。各种部件程序全靠抄 ,成为究极缝合怪。本文用stm32f407+FreeRTOS+lvgl演示一些demo。 原文链接:STM32F4+FreeRTOS+LVGL实现快速开发(缝合怪) lvgl官方的音乐播放器demo: 百问网的2048小游戏: STM32F407这款芯片就不多介绍

    2024年02月08日
    浏览(59)
  • 嵌入式开发:使用STM32CubeMX 和 Keil uVision5实现两位数码管循环显示实验

    一、STM32CubeMx实现数码管 1、双击打开STM32CubeMX。 2、点击File选项,在File列表下选择New Project选项新建工程。 3、在图中所示位置的方框中输入我们使用的芯片型号来搜索芯片 4、与我们的搜索相关的芯片型号会在这里呈现,我们只需要选择我们需要的即可,这里我们双击第一个

    2024年02月08日
    浏览(49)
  • 专门针对数字电源相关应用,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日
    浏览(52)
  • STM32开发环境搭建&工程创建(嵌入式学习)

    简介 STM32CubeMX是STMicroelectronics公司提供的一款集成开发环境(IDE)工具,用于快速配置和初始化STM32微控制器系列的软件工程。它提供了图形化界面和交互式工具,使开发者能够轻松地生成STM32微控制器的初始化代码和配置文件。 STM32CubeMX具有以下主要功能和特点: 微控制器

    2024年02月11日
    浏览(66)
  • 嵌入式物联网STM32实战开发代码例程库

    几百个例程清单,CSDN下载地址: https://download.csdn.net/download/weixin_39804904/88671879 开发例程清单(持续新增中,欢迎点赞关注): 0001基于STM32F103单片机GPIO实现控制LED灯闪烁的程序代码0001.rar 0002基于STM32F103单片机GPIO实现按键KEY的检测程序代码0002.rar 0003基于STM32F103单片机GPIO实现

    2024年02月02日
    浏览(45)
  • 【STM32嵌入式系统设计与开发】——7有源蜂鸣器应用

    STM32资料包: 百度网盘下载链接:链接:https://pan.baidu.com/s/1mWx9Asaipk-2z9HY17wYXQ?pwd=8888 提取码:8888 观察电路图,核心板PD14连接底板中的P2外接排针,将正负极接上直流电压即可持续发声,频率固定。LED的PA0连接底板的D1灯。 步骤1:复制工程模板“1_Template”重命名为“4_Active

    2024年03月21日
    浏览(68)
  • 嵌入式系统开发笔记104:在STM32CubeIDE中导入工程

      本文讲述如何在STM32CubeIDE中导入现有工程。

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

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

    2024年02月20日
    浏览(60)
  • 嵌入式开发--STM32G4系列片上FLASH的读写

    这个玩意吧,说起来很简单,就是几行代码的事,但楞是折腾了我大半天时间才搞定。原因后面说,先看代码吧: 读操作很简单,以32位方式读取的时候是这样的: 需要注意的是,当以32位方式读取时,地址需要是4的整数倍,即32位。 8位或16位方式类似操作即可 需要注意的

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

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

    2024年02月20日
    浏览(67)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包