阿巴斯 发表于 2023-6-27 16:19

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

我有参考例程,

阿巴斯 发表于 2023-9-1 14:54

ruicortech8888 发表于 2023-6-27 23:57
我有参考例程,

是官方的吗

uytyu 发表于 2023-9-5 10:06

程序在处理数据报文时,进入低功耗状态后,没有正确设置RTC中断唤醒方式。

louliana 发表于 2023-9-5 10:25

通过RCC_APB1PeriphClockCmd函数启用电源接口时钟,然后检查并设置RTC Wakeup Timer的配置寄存器。

timfordlare 发表于 2023-9-5 10:36

需要正确配置RTC的中断设置。            

yorkbarney 发表于 2023-9-5 10:47

检查RTC中断是否已经正确地使能。

robincotton 发表于 2023-9-5 11:01

将RTC的中断设置为优先级较高的中断,并将RTC的中断输出引脚连接到系统的复位引脚上,以便在RTC中断触发时将系统复位并跳转到用户应用程序中。

houjiakai 发表于 2023-9-5 11:09

正确地配置了RTC模块,并设置了正确的时间和闹钟

pl202 发表于 2023-9-5 11:27

RTC中断的优先级正确设置,并且中断使能位被打开。

yeates333 发表于 2023-9-5 11:46

在进入STOP2模式之前,需要配置唤醒源以响应RTC中断

olivem55arlowe 发表于 2023-9-5 12:08

RTC中断使能位被正确设置,并且RTC的预分频器和计数器被正确初始化。

saservice 发表于 2023-9-5 12:17

可以检查程序中与RTC中断相关的部分,确保程序正确设置了RTC中断唤醒方式。

qiufengsd 发表于 2023-9-5 12:50

未正确配置RTC中断或者程序逻辑错误。

ingramward 发表于 2023-9-5 13:02

允许RTC中断唤醒和进入STOP2模式。

saservice 发表于 2023-9-5 13:25

需要检查RTC的中断设置是否正确,包括中断优先级、中断输出引脚、中断触发方式等。如果设置不正确,那么RTC中断就无法触发系统复位

houjiakai 发表于 2023-9-5 13:32

检查设备是否存在过充、过放或者电压不稳定的情况

robincotton 发表于 2023-9-5 14:29

可以检查程序是否在进入STOP2模式后,仍然在处理数据报文,这可能导致程序无法正确响应RTC中断。

mollylawrence 发表于 2023-9-5 14:37

检查系统软件中是否存在相关配置问题

febgxu 发表于 2023-9-5 14:53

确保RTC中断的优先级设置正确            
页: [1] 2
查看完整版本: RTC中断无法唤醒STOP2模式