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); 

四、功能验证

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值