当前位置: 首页 > news >正文

STM32G474单片机开发入门(九)低功耗模式实战

文章目录

    • 一.概要
    • 二.STM32单片机低功耗基本介绍
    • 三.STM32G474RET6单片机停止模式介绍
    • 四.CubeMX配置一个低功耗停止模式的例程
      • 1.硬件准备
      • 2.创建工程
      • 3.实验效果
    • 五.小结

一.概要

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

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

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

STM32G474RET6单片机提供了多种功耗模式,以达到不同层次的降低功耗的目的:

  1. ‌睡眠模式(Sleep Mode)‌
    ‌特点‌:CPU停止工作,但外设和时钟仍正常运行‌,在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。
    ‌功耗‌:典型值为37μA/MHz(运行模式)或110μA(低功耗睡眠模式)‌。
    ‌唤醒方式‌:通过任意中断或事件唤醒,响应速度快(几微秒)‌。
    ‌适用场景‌:短时间等待或需快速响应的任务(如按键检测)‌。
  2. ‌停止模式(Stop Mode)‌
    ‌特点‌:关闭主时钟(HSI/HSE/PLL),保留SRAM和寄存器数据,仅低功耗时钟(如LSI)运行‌。
    ‌功耗‌:典型值为80.5μA(带RTC)或80μA(不带RTC)‌。
    ‌唤醒方式‌:通过外部中断(EXTI)、RTC或特定外设唤醒‌。
    ‌适用场景‌:周期性采样的传感器(如温湿度采集)‌。
  3. ‌待机模式(Standby Mode)‌
    ‌特点‌:几乎所有电路关闭,仅备份域(RTC、BKP寄存器)供电,SRAM数据丢失‌。
    ‌功耗‌:典型值为0.88μA(带RTC)或0.13μA(不带RTC)‌。
    ‌唤醒方式‌:仅通过复位引脚、RTC闹钟或WKUP引脚唤醒‌。
    ‌适用场景‌:超长时间待机(如智能门锁)‌。
  4. ‌低功耗运行模式(Low-Power Run Mode)‌
    ‌特点‌:CPU以较低频率运行(如2MHz),外设可选择性关闭‌。
    ‌功耗‌:典型值为810μA‌。
    ‌适用场景‌:需持续运行但功耗敏感的任务(如后台数据采集)‌。
  5. ‌低功耗睡眠模式(Low-Power Sleep Mode)‌
    ‌特点‌:CPU停止且限制最大频率,外设可配置为低功耗状态‌。
    ‌功耗‌:典型值为110μA‌。
    ‌适用场景‌:平衡功耗与唤醒速度的中等需求‌

三.STM32G474RET6单片机停止模式介绍

STM32G474RET6的停止模式是一种低功耗状态,通过停止时钟系统和优化电压调节器实现显著节能,同时保留SRAM和寄存器内容‌。以下是关键特性与实现要点:

核心特性
停止所有1.8V供电区域的时钟(PLL、HSI、HSE振荡器关闭)‌,保留I/O引脚状态,外设停止工作‌
电压调节器可配置为正常或低功耗模式(通过PWR_CR的LPMS位)‌。
依赖外部中断(如按键、RTC闹钟)或复位信号唤醒‌,唤醒后默认使用HSI(16MHz)作为系统时钟,需手动切换至HSE以稳定运行‌。

‌进入停止模式流程‌
清除PWR_CR的LPMS位(选择电压调节器模式),设置SCB->SCR的SLEEPDEEP位为1,执行WFI/WFE指令进入停止模式。

程序代码如下:

  /* Stop 0 mode with Main Regulator */MODIFY_REG(PWR->CR1, PWR_CR1_LPMS, PWR_CR1_LPMS_STOP0);/* Set SLEEPDEEP bit of Cortex System Control Register */SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));/* Select Stop mode entry --------------------------------------------------*//* Request Wait For Interrupt */__WFI();

‌退出停止模式
有外部中断,就能退出停止模式,退出后需重新配置系统时钟(如HSE+PLL)‌,若启用低功耗电压调节器,需额外等待启动延迟‌。
应用场景
电池供电设备(如传感器节点)的间歇性工作‌,需快速唤醒且保留上下文的中断响应场景。

四.CubeMX配置一个低功耗停止模式的例程

1.硬件准备

STLINK接STM32G474RET6开发板,STLINK接电脑USB口。
在这里插入图片描述

2.创建工程

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

如下图所示,配置下载口引脚,PA13为SWD的SWDIO脚,PA14为SWD的SWCLK脚。
在这里插入图片描述

如下图所示,可以查看STM32G474RET6开发板原理图,PC8连接LED灯,所以配置PC8为GPIO输出,推挽输出。
在这里插入图片描述

如下图所示,配置系统主频170Mhz,使用内部16MHZ晶振。
在这里插入图片描述

PA0引脚跟按键相连,配置PA0引脚为外部中断0引脚,配置PA0引脚下拉,因为是上升沿产生中断,用来唤醒。
在这里插入图片描述

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

在这里插入图片描述

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

添加代码

在这里插入图片描述

//系统时钟初始化配置,用于从停止模式唤醒之后系统时钟初始化,采用内部晶振,系统主频还是配置成170MHZ
static void SYSCLKConfig_STOP(void)
{RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};RCC_OscInitTypeDef RCC_OscInitStruct = {0};uint32_t pFLatency = 0;/* Enable Power Control clock */__HAL_RCC_PWR_CLK_ENABLE();/* Get the Oscillators configuration according to the internal RCC registers */HAL_RCC_GetOscConfig(&RCC_OscInitStruct);RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV4;RCC_OscInitStruct.PLL.PLLN = 85;RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/* Get the Clocks configuration according to the internal RCC registers */HAL_RCC_GetClockConfig(&RCC_ClkInitStruct, &pFLatency);/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2clocks dividers */RCC_ClkInitStruct.ClockType     = RCC_CLOCKTYPE_SYSCLK;RCC_ClkInitStruct.SYSCLKSource  = RCC_SYSCLKSOURCE_PLLCLK;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, pFLatency) != HAL_OK){Error_Handler();}
}
/* 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();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();//内部16MHZ晶振,170MHZ系统主频/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();//PA0配置成外部中断引脚,中断使能,引脚下拉,上升沿产生中断,PC8配置成输出/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */HAL_Delay(1000);//等待1秒for(int i=0;i<10;i++){HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_8);//LED灯闪烁HAL_Delay(200);}HAL_PWREx_EnterSTOP0Mode(PWR_STOPENTRY_WFI);//进入停止模式,中断可以唤醒SYSCLKConfig_STOP();//唤醒后,配置系统时钟为170MHZwhile (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_8);//PC8翻转输出HAL_Delay(200);//等待200ms}/* USER CODE END 3 */
}

3.实验效果

板子上电后,LED会闪烁2秒左右然后停止闪烁,这时板子已经进入低功耗停止模式,再去按唤醒按键(wk_up),板子会继续运行,LED灯一直闪烁。

五.小结

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

http://www.dtcms.com/a/470354.html

相关文章:

  • 怎么样给一个网站做横向导航栏搜索引擎优化的概念是什么
  • 网站开发近期市场做一个网站的预算
  • mac使用国内源安装brew并且配置使用国内源安装软件
  • 基因组组装:3. juicer 比对 HiC 数据至参考基因组
  • 工信部网站原来是wordpress发送自定义邮件
  • 怎么再贴吧给自己的网站做宣传网站建设的维护工作有哪些
  • Thinkphp通过supervisor 执行 queue 队列不间断报错Unable to write output 解决
  • Wireshark常用过滤规则
  • 24小时自助建站网站运营与管理的内容包括
  • 巴塘网站建设建设投资基金管理有限公司网站
  • 配置Python环境之Conda
  • 山东网站建设开发建设部网上办事大厅
  • 十四,数据结构-堆
  • 网站建设v5star房屋装修效果图大全
  • Dlib机器学习算法C++实现示例
  • 在rk3576搞出来了虚拟摄像头,能打抖音伴侣
  • 计算机组成原理 刘宏伟 第一章 计算机系统概论
  • 基于模型的系统工程(MBSE)实践指南:破解研发不确定性的利器
  • 宠物用品技术支持 东莞网站建设顺企网企业查询
  • 网站建设 总结手机 wordpress
  • 【汽车篇】AI深度学习在汽车零部件外观检测——车身底涂胶条应用方案
  • 佛山网站开发公司有哪些jsp网站开发实现增删改查
  • 【第十七周】机器学习笔记06
  • 两个人做类似的梦 网站多个wordpress管理
  • 正则表达式入门教程
  • 做网站需要什么样的服务器中国建设银行龙卡信用卡网站
  • 填充标记左填充及标签只包含补全内容解析(117)
  • 动态IP代理的应用:提高数据抓取效率与保护在线隐私
  • web前端学习LangGraph
  • 昆山建设局网站首页关于域名和主机论坛的网站