0
点赞
收藏
分享

微信扫一扫

STM32L433低功耗模式(STOP2)使用与注意事项

近期有个项目需要对功耗进行严格控制,经综合考虑选定STM32L433。因为我们用到LCD段码屏显示,而L433自身就可以直接驱动LCD屏幕,并且进入低功耗模式不会影响到屏幕的显示。其他外设还用到了ADC,两个串口。

首先我们要配置一个唤醒源,我们用的是STOP2模式。所以LCD中断,RTC中断,外部中断都可以唤醒,因为我们要定时上传数据,所以选定RTC中断,RTC中断有两种,一个是闹钟,一个是周期性的定时。我们不需要精准的时间点唤醒,只需要一个固定的周期就可以了。所以初始化了RTC。如图:

STM32L433低功耗模式(STOP2)使用与注意事项_初始化

并且配置了一个定时器,代码如下:

	/* 开启RTC唤醒中断 唤醒周期10000/2K=5S*/	
	if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 10000, RTC_WAKEUPCLOCK_RTCCLK_DIV16) != HAL_OK)
	{
		Error_Handler();
	}
	DBGMCU->CR |= DBGMCU_CR_DBG_STOP; /* 为了能够在停止模式下调试 */

在需要休眠之前,我们还需要做一些工作,比如释放掉用不到的GPIO,外设等资源,进一步控制功耗(按需处理)。代码如下:

	/*停止ADC节能*/
	HAL_ADCEx_InjectedStop(&hadc1);
	HAL_ADC_Stop(&hadc1);
    /*复位ADC */
	HAL_ADC_DeInit(&hadc1);
	/*关闭模组通讯串口 */
	HAL_UART_MspDeInit(&hlpuart1);
    /*释放GPIO */
    HAL_GPIO_DeInit(GPIO_TypeDef  *GPIOx, uint32_t GPIO_Pin)

然后关掉滴答定时器

	/* De-Init the low level hardware */
	SysTick->CTRL = 0x00;//关闭定时器 他喵的,不关不好使
    SysTick->VAL = 0x00;//清空val,清空定时器

然后进入STOP2模式,因为我们定义的是RTC中断,所以可以使用WFI指令:

HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI); //进入STOP模式 通过RTC唤醒

等到唤醒以后第一件事,要重新配置时钟(及其重要)

SystemClock_Config();

最后按需恢复自己用到的外设就可以了。


总结一下:

1.进入低功耗模式之前一定要关闭用不到的外设,这些外设不关闭会消耗很大的电流。

2.手册说不用关闭滴答定时器,实测是需要关闭的。

3.恢复后的代码是从唤醒中断开始执行的,我们中断啥都没做,所以是从休眠后的第一句执行的。

4.恢复后第一件是要配置时钟,因为休眠过程部分时钟关闭了。

5.其他外设使用前,一定记得初始化

完事,下班!

举报

相关推荐

0 条评论