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

项目中选用STM32L433进行功耗控制,利用其内置功能驱动LCD屏幕并在STOP2模式下通过RTC中断唤醒。初始化RTC设置周期性定时,关闭不必要的外设如ADC和串口,进入低功耗前释放GPIO资源并停用滴答定时器。唤醒后首要任务是恢复系统时钟配置,然后按需恢复外设功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

	/* 开启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.其他外设使用前,一定记得初始化!

完事,下班!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山东徐大侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值