STM32
直播中

费加罗

8年用户 823经验值
私信 关注
[问答]

使用STM32G070实验的时候发现G070的RTC无法唤醒进入SLEEP模式下的CPU,怎么解决?

最近使用STM32G070实验的时候发现G070的RTC无法唤醒进入SLEEP模式下的CPU,不知道什么原因。
void PWR_Enter_Sleep(void)
{
  /* Enable PWR clock */
  __HAL_RCC_PWR_CLK_ENABLE();
  /* Disable Prefetch Buffer */
  __HAL_FLASH_PREFETCH_BUFFER_DISABLE();
  RCC->IOPSMENR  = 0x00u;
  RCC->AHBSMENR  = 0x00u;
  RCC->APBSMENR1 = 0x00u;
  RCC->APBSMENR2 = 0x00u;
  /*Suspend tick increment to prevent wakeup by Systick interrupt.
  Otherwise the Systick interrupt will wake up the device within 1ms (HAL time base)*/
  HAL_SuspendTick();
  /* Enter Sleep Mode , wake up is done once User push-button is pressed */
  HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
        HAL_ResumeTick();
}

void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
LCD_ON();
LCD_HZ_1616(16*numbx,32,1,BLUE,WHITE);
numbx++;
}

运行中发现每次必须使用按键才能唤醒CPU,同时显示的字符会更新。

回帖(1)

马占云

2024-3-26 18:08:33
SMENR2 = 0x00u;   /* Configure RTC Wakeup Interrupt */   HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 5, RTC_WAKEUPCLOCK_RTCCLK_DIV16);   /* Enter sleep mode */   HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); }

可能的问题是RTC没有配置好以便唤醒CPU。你可以尝试以下方法:

1. 确保在RTC配置中启用了唤醒功能。检查RTC_CR寄存器的WUTE位(Bit 10)。确保这个位被设置为1,以启用唤醒功能。

2. 确保RTC时钟已经配置好,以便在唤醒时产生中断。检查RTC_CR寄存器的WUCKSEL位(Bit 3-0)。这些位确定RTC时钟源和分频因子,以生成唤醒中断。

3. 确保RTC的唤醒定时器已经配置。在你的代码中,你使用了HAL_RTCEx_SetWakeUpTimer_IT函数来配置唤醒定时器。确保这个函数被正确调用,并且提供正确的参数(唤醒时间和时钟分频因子)。

4. 确保你在进入睡眠模式之前,使能了RTC的唤醒中断。你可以在HAL_PWR_EnterSLEEPMode函数之前,调用HAL_RTCEx_DeactivateWakeUpTimer函数来禁用唤醒中断,然后在HAL_PWR_EnterSLEEPMode函数之后,调用HAL_RTCEx_ActivateWakeUpTimer函数来重新启用唤醒中断。

如果仍然无法解决问题,你可以考虑使用调试器来跟踪程序并检查RTC的配置和唤醒中断是否正确。你还可以参考STMicroelectronics提供的官方文档和代码示例,以了解更多关于RTC和睡眠模式的详细信息。
举报

更多回帖

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