RTC中断无法唤醒STOP2模式
最近在做一个项目需要用到低功耗,项目中选择进入STOP2模式。程序设计在RTC中断中,满足某一条件进入STOP2模式,等待下一个RTC中断唤醒,但是进入SOP2模式后,MCU就一直在低功耗状态,RTC没有唤醒,程序一直在:SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP);位置,还有一个比较奇怪的是,明明设置的是中断模式,但是程序会跑到 __SEV();__WFE();__WFE();程序位置,这个是等待事件唤醒。程序的整体架构是,封装一个函数处理数据报文,当满足一些条件后执行进入低功耗,这个封装的函数在RTC中断中运行,或者在while循环中运行,但是结果都是一样的,请各位大佬,麻烦给点意见。void PWR_EnterSTOP2Mode(uint8_t PWR_STOPEntry,uint32_t RetentionMode)
{
uint32_t tmpreg = 0;
/* Check the parameters */
assert_param(IS_PWR_STOP_ENTRY(PWR_STOPEntry));
/* Wait MR Voltage Adjust Complete */
while((PWR->STS2 &0X2) != 2);
tmpreg = PWR->CTRL3;
/* Clear SRAMRET bits */
tmpreg &= (~PWR_CTRL3_RAMRETMASK);
/* Set SRAM1/2 select */
tmpreg |= RetentionMode;
PWR->CTRL3 = tmpreg;
/* Select the regulator state in STOP2 mode ---------------------------------*/
tmpreg = PWR->CTRL1;
/* Clear LPMS bits */
tmpreg &= (~PWR_CTRL1_LPMSELMASK);
/* Set stop2 mode select */
tmpreg |= PWR_CTRL1_STOP2;
/* Store the new value */
PWR->CTRL1 = tmpreg;
/* Set SLEEPDEEP bit of Cortex System Control Register */
SCB->SCR |= SCB_SCR_SLEEPDEEP;
/* Select STOP mode entry --------------------------------------------------*/
if(PWR_STOPEntry ==PWR_STOPENTRY_WFI)
{
/* Request Wait For Interrupt */
__WFI();
}
else
{
/* Request Wait For Event */
__SEV();
__WFE();
__WFE();
}
/* Reset SLEEPDEEP bit of Cortex System Control Register */
SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP);
}
我有参考例程, ruicortech8888 发表于 2023-6-27 23:57
我有参考例程,
是官方的吗 程序在处理数据报文时,进入低功耗状态后,没有正确设置RTC中断唤醒方式。 通过RCC_APB1PeriphClockCmd函数启用电源接口时钟,然后检查并设置RTC Wakeup Timer的配置寄存器。 需要正确配置RTC的中断设置。 检查RTC中断是否已经正确地使能。 将RTC的中断设置为优先级较高的中断,并将RTC的中断输出引脚连接到系统的复位引脚上,以便在RTC中断触发时将系统复位并跳转到用户应用程序中。 正确地配置了RTC模块,并设置了正确的时间和闹钟 RTC中断的优先级正确设置,并且中断使能位被打开。 在进入STOP2模式之前,需要配置唤醒源以响应RTC中断 RTC中断使能位被正确设置,并且RTC的预分频器和计数器被正确初始化。 可以检查程序中与RTC中断相关的部分,确保程序正确设置了RTC中断唤醒方式。 未正确配置RTC中断或者程序逻辑错误。 允许RTC中断唤醒和进入STOP2模式。 需要检查RTC的中断设置是否正确,包括中断优先级、中断输出引脚、中断触发方式等。如果设置不正确,那么RTC中断就无法触发系统复位 检查设备是否存在过充、过放或者电压不稳定的情况 可以检查程序是否在进入STOP2模式后,仍然在处理数据报文,这可能导致程序无法正确响应RTC中断。 检查系统软件中是否存在相关配置问题 确保RTC中断的优先级设置正确
页:
[1]
2