STM32
直播中

从未拥有

9年用户 935经验值
擅长:可编程逻辑 电源/新能源 光电显示
私信 关注
[问答]

STM32L073V8T6 RTC触发1次唤醒中断后,再去关闭RTC然后MCU进入停止模式,会增加1.5ua电流的耗电是为什么?

需要实现的功能:外部用1个按键用于开启MCU的内部RTC,用于1S唤醒1次停止模式状态下的mcu。这个按键再按一下可以关闭MCU内部的RTC,使MCU一直在停止模式。
遇到的问题:按键开启MCU的内部RTC时,如果在1S内RTC触发唤醒中断前关闭RTC,再让MCU进入停止模式,此时MCU的耗电是0.8ua。如果让RTC触发了触发了1次唤醒中断,再去关闭RTC,再让MCU进入听停止模式,此时MCU的耗电是2.3ua。像问一下这到底是什么问题?是我关闭RTC的方法有误吗?下面是我用6行关闭RTC的代码。

HAL_RTC_DeInit( Inside_Rtc);
__HAL_RCC_RTC_DISABLE();
HAL_NVIC_DisableIRQ(RTC_IRQn);
__HAL_RTC_WAKEUPtiMER_CLEAR_FLAG( Inside_Rtc, RTC_FLAG_WUTF);
__HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG();
__HAL_RCC_LSE_CONFIG(RCC_LSE_OFF);





回帖(1)

李骏鹏

2024-3-27 16:45:57
在你的代码中,你使用了内置RTC的HAL驱动程序来关闭RTC,并且禁用了RTC时钟。然而,HAL_RTC_DeInit()函数不仅仅关闭RTC,还会重置RTC的寄存器和状态。因此,当你再次启用RTC时,它将处于初始状态,并且可能会触发唤醒中断,导致电流增加。

解决此问题的方法是,在关闭RTC之前,首先取消RTC的唤醒功能。你可以通过以下步骤完成:

1. 使用HAL_RTCEx_DeactivateWakeUpTimer()函数来禁用RTC的唤醒功能。

2. 关闭RTC时关掉RTC中断,以防止触发唤醒中断。你可以使用HAL_RTC_Alarm_Deactivate()函数来关闭RTC的闹钟中断。

3. 最后,关闭RTC并禁用RTC时钟。

下面是修正后的代码示例:

```
// 禁用RTC的唤醒功能
HAL_RTCEx_DeactivateWakeUpTimer(&Inside_Rtc);

// 关闭RTC的闹钟中断
HAL_RTC_Alarm_Deactivate(&Inside_Rtc, RTC_ALARM_A);

// 关闭RTC并禁用RTC时钟
HAL_RTC_DeInit(&Inside_Rtc);
__HAL_RCC_RTC_DISABLE();
```

通过这样的修改,你应该能够解决电流增加的问题。如果问题仍然存在,你可能需要进一步检查其他因素,如其他外设的唤醒中断是否影响了电流的消耗。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分