【发布时间】:2021-06-16 00:22:06
【问题描述】:
我正在将 STM32F072ZB 运行到待机模式。 MCU 大部分时间都在休眠(每 1 小时醒来一次以读取传感器)。由于我正在运行看门狗,因此我使用 RTC 每 25 秒生成一次警报(看门狗周期约为 28 秒)。所以当我睡1小时时,我将闹钟设置为现在+25s,然后进入待机状态,被闹钟唤醒踢看门狗并将闹钟设置为下一个25s等......
它几乎可以正常工作,但由于某种原因,有时 MCU 会因为看门狗未启动而重置。这意味着我由于某种原因错过了警报。我一直在做一些测试,超过 24 小时发生了 6 次。
有人遇到过这种问题吗?
代码在这里:
// Set RTC_Alarm
HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);
util_msDelay(10);
/*To configure the wake up timer to 25s the WakeUpCounter is set to 0xC738:
Wakeup Time Base = 16 /(32.768 kHz RC) = ~0.49 ms
Wakeup Time = ~0.49 ms * WakeUpCounter
Therefore, with wake-up counter = 0xC738 = 51.000
Wakeup Time = 0.49 ms * 51,000 = ~ 25 sec. */
HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0xC738, RTC_WAKEUPCLOCK_RTCCLK_DIV16);
util_msDelay(10);
if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET) {
/* Clear Standby flag */
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
}
/* Clear Wake-up timer flag if it is set */
/* Flag will set after exiting from Standby */
if (LL_RTC_IsActiveFlag_WUT(RTC) == 1) {
LL_RTC_ClearFlag_WUT(RTC);
}
/* Clear all related wakeup flags */
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
util_msDelay(10);
【问题讨论】:
-
观察到此问题的任何周期性?顺便说一句,您在睡眠模式下的掉电重置级别是多少?
标签: c embedded stm32 interrupt