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

STM32 L4系列单片机低功耗模式(STOP模式)

  STM32 L4系列单片机的STOP2模式。

目录

    • 一、应用场景
    • 二、设计思路
    • 三、关键代码
    • 四、功能验证

一、应用场景

  在实际的项目开发过程中,有些产品是要求有睡眠模式的,比如智能手表、对讲机等移动设备,在不使用的时候希望设备不要耗电来延长设备工作时间。这里提供一种解决思路:收到睡眠指令(或某个按键按下时)进入睡眠模式并开启唤醒按键的GPIO中断,当唤醒按键按下时退出睡眠模式。

二、设计思路

1、关闭已打开的外设(包括调试烧录口)
2、所有GPIO设置为模拟输入
3、关闭所有GPIO时钟
4、开启GPIO中断(中断唤醒用,如果不用GPIO中断唤醒不用开)
5、进入STOP模式

三、关键代码

/* 关闭调试口 */
HAL_DBGMCU_DisableDBGStopMode();
HAL_DBGMCU_DisableDBGSleepMode();
HAL_DBGMCU_DisableDBGStandbyMode();

/* 关闭串口1时钟 */
LL_USART_DeInit(USART1);
__HAL_RCC_USART1_CLK_DISABLE();

/* 设置所有引脚为模拟输入 */
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_All;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOC,&GPIO_InitStruct);
HAL_GPIO_Init(GPIOH,&GPIO_InitStruct);
HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);
HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);
HAL_GPIO_Init(GPIOD,&GPIO_InitStruct);

/* 关闭所有GPIO时钟 */
__HAL_RCC_GPIOC_CLK_DISABLE();
__HAL_RCC_GPIOH_CLK_DISABLE();
__HAL_RCC_GPIOA_CLK_DISABLE();
__HAL_RCC_GPIOB_CLK_DISABLE();
__HAL_RCC_GPIOD_CLK_DISABLE();

//开启GPIO中断唤醒MCU
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Pin = OK_key_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL_NVIC_SetPriority(EXTI15_10_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);

HAL_PWR_DisablePVD();								//禁用电源电压检测器(PVD)
HAL_SYSCFG_DisableVREFBUF();						//禁用内部电压基准缓冲器(VREFBUF)
HAL_SYSCFG_DisableIOAnalogSwitchBooster();			//禁用I/O模拟量开关电压升压器。
__HAL_PWR_PVM3_EXTI_DISABLE_RISING_FALLING_EDGE();	//禁用PVM3中断
__HAL_PWR_PVM4_EXTI_DISABLE_RISING_FALLING_EDGE();	//禁用PVM4中断

/* 降低核心工作电压,需要根据实际工作频率设置,建议在Cubemx内的RCC项目中配置  */
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);
HAL_SuspendTick(); 									// 暂停滴答时钟,防止通过滴答时钟中断唤醒
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);  				// 清除唤醒标记
__HAL_RCC_PWR_CLK_ENABLE();							//运行电源管理时钟 

//进入STOP模式2
HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI); 

四、功能验证

  可以将设备接在稳压源或专门的功耗测试设备上,对比正常工作下的电流和睡眠模式下的电流大小。


http://www.kler.cn/a/412673.html

相关文章:

  • 【TQ2440】02 串口连接进入u-boot
  • IntelliJ+SpringBoot项目实战(十四)--在SpringBoot中整合SpringSecurity和JWT(上)
  • uniCloud云开发
  • css—轮播图实现
  • 2025蓝桥杯(单片机)备赛--扩展外设之UART1的原理与应用(十二)
  • 对于公平与效率的关系问题,材料中有两种不同倾向性的观点,请对这两种观点分别加以概述并谈谈你的看法。字数不超过500字。
  • 【TQ2440】02 串口连接进入u-boot
  • 【CSP CCF记录】201812-1第15次认证 小明上学
  • leecode56.合并区间
  • 华财术_号卡分销平台讲解(四大运营商+手机卡)
  • 【圣明先森】SPP集合划分问题(第二集)
  • 【halcon】Metrology工具系列之 get_metrology_object_model_contour
  • 关于人工智能
  • 365天深度学习训练营-第P6周:VGG-16算法-Pytorch实现人脸识别
  • 多线程编程:概念、原理与实践
  • EXCEL中的科学计数法:为何存在与用户的无奈
  • 排序算法之选择排序篇
  • GaussDB高智能--智能优化器介绍
  • 【人工智能】Python常用库-PyTorch常用方法教程
  • UE5 fieldSystemActor类
  • UE5 的DOP简化碰撞的基本概念
  • Unity 中 Application 四种常用目录总结
  • golang 定时器的不同任务
  • 单片机main函数执行结束干嘛?
  • YOLO系列论文综述(从YOLOv1到YOLOv11)【第3篇:YOLOv1——YOLO的开山之作】
  • 【深度学习基础】一篇入门模型评估指标(分类篇)