打印
[N32L4xx]

RTC中断无法唤醒STOP2模式

[复制链接]
4514|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
阿巴斯|  楼主 | 2023-6-27 16:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在做一个项目需要用到低功耗,项目中选择进入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 | 只看该作者

是官方的吗

使用特权

评论回复
地板
uytyu| | 2023-9-5 10:06 | 只看该作者
程序在处理数据报文时,进入低功耗状态后,没有正确设置RTC中断唤醒方式。

使用特权

评论回复
5
louliana| | 2023-9-5 10:25 | 只看该作者
通过RCC_APB1PeriphClockCmd函数启用电源接口时钟,然后检查并设置RTC Wakeup Timer的配置寄存器。

使用特权

评论回复
6
timfordlare| | 2023-9-5 10:36 | 只看该作者
需要正确配置RTC的中断设置。              

使用特权

评论回复
7
yorkbarney| | 2023-9-5 10:47 | 只看该作者
检查RTC中断是否已经正确地使能。

使用特权

评论回复
8
robincotton| | 2023-9-5 11:01 | 只看该作者
将RTC的中断设置为优先级较高的中断,并将RTC的中断输出引脚连接到系统的复位引脚上,以便在RTC中断触发时将系统复位并跳转到用户应用程序中。

使用特权

评论回复
9
houjiakai| | 2023-9-5 11:09 | 只看该作者
正确地配置了RTC模块,并设置了正确的时间和闹钟

使用特权

评论回复
10
pl202| | 2023-9-5 11:27 | 只看该作者
RTC中断的优先级正确设置,并且中断使能位被打开。

使用特权

评论回复
11
yeates333| | 2023-9-5 11:46 | 只看该作者
在进入STOP2模式之前,需要配置唤醒源以响应RTC中断

使用特权

评论回复
12
olivem55arlowe| | 2023-9-5 12:08 | 只看该作者
RTC中断使能位被正确设置,并且RTC的预分频器和计数器被正确初始化。

使用特权

评论回复
13
saservice| | 2023-9-5 12:17 | 只看该作者
可以检查程序中与RTC中断相关的部分,确保程序正确设置了RTC中断唤醒方式。

使用特权

评论回复
14
qiufengsd| | 2023-9-5 12:50 | 只看该作者
未正确配置RTC中断或者程序逻辑错误。

使用特权

评论回复
15
ingramward| | 2023-9-5 13:02 | 只看该作者
允许RTC中断唤醒和进入STOP2模式。

使用特权

评论回复
16
saservice| | 2023-9-5 13:25 | 只看该作者
需要检查RTC的中断设置是否正确,包括中断优先级、中断输出引脚、中断触发方式等。如果设置不正确,那么RTC中断就无法触发系统复位

使用特权

评论回复
17
houjiakai| | 2023-9-5 13:32 | 只看该作者
检查设备是否存在过充、过放或者电压不稳定的情况

使用特权

评论回复
18
robincotton| | 2023-9-5 14:29 | 只看该作者
可以检查程序是否在进入STOP2模式后,仍然在处理数据报文,这可能导致程序无法正确响应RTC中断。

使用特权

评论回复
19
mollylawrence| | 2023-9-5 14:37 | 只看该作者
检查系统软件中是否存在相关配置问题

使用特权

评论回复
20
febgxu| | 2023-9-5 14:53 | 只看该作者
确保RTC中断的优先级设置正确              

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

28

帖子

0

粉丝