硬汉嵌入式论坛

 找回密码
 立即注册
查看: 425|回复: 5
收起左侧

[RTC] STM32进入待机模式后,通过RTC闹钟唤醒后,然后重复进入待机,立马就软件重启了

[复制链接]

15

主题

23

回帖

68

积分

初级会员

积分
68
发表于 2023-8-12 14:16:15 | 显示全部楼层 |阅读模式
各位大佬好,我的流程是这样:程序第一次启动,配置RTC闹钟,然后上报数据,上报完成后,自动进入待机模式;

HAL_PWR_EnterSTANDBYMode();
进入待机模式后,等待RTC闹钟A触发;


//RTC闹钟中断服务函数
void RTC_Alarm_IRQHandler(void)
{       
    HAL_RTC_AlarmIRQHandler(&RTC_Handler);
}
   
//RTC闹钟A中断处理回调函数
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
        SEGGER_RTT_printf(0,"1  RTC_Handler->ISR = %.8X  ~~~~~~~~~~~~~~~~~~~~~`\r\n",RTC_Handler.Instance->ISR);
}

PS:HAL_RTC_AlarmIRQHandler函数已经清除了中断。

到了闹钟A的定时间,程序唤醒,重复执行上一步动作,配置RTC闹钟,然后上报数据,上报完成后,自动进入待机模式;
HAL_PWR_EnterSTANDBYMode();
因为设置的是同一个闹钟时间,应该第二天的同一时刻触发,但是程序却立刻重启了,然后进入待机,又重启,周而复始。。。。。。

通过查看相关寄存器,发现第一次触发闹钟中断后,闹钟中断标志位清除了,同时查看RCC的复位寄存器,是触发了软件复位:
RCC->CSR = 1E000000  ~~~~~~~~~~~~~~~~~~~~~

那么我在进入待机模式之前清除软件复位标志:

_HAL_RCC_CLEAR_RESET_FLAGS();
HAL_PWR_EnterSTANDBYMode();



但是依然会不停的发生重启,这个时候的标志是:
RCC->CSR = 00000000  ~~~~~~~~~~~~~~~~~~~~~

跪求大佬指点为什么会发生复位呀
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106856
QQ
发表于 2023-8-12 14:25:39 | 显示全部楼层
上次的RTC问题解决了吗
回复

使用道具 举报

15

主题

23

回帖

68

积分

初级会员

积分
68
 楼主| 发表于 2023-8-12 14:49:56 | 显示全部楼层
eric2013 发表于 2023-8-12 14:25
上次的RTC问题解决了吗

上次我以为是RTC触发的复位,后来发现复位原因与RTC无关,所以从新发帖的
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
发表于 2023-8-14 09:32:19 | 显示全部楼层
其他内容注释一下,逐个排查
回复

使用道具 举报

15

主题

23

回帖

68

积分

初级会员

积分
68
 楼主| 发表于 2023-8-14 18:25:31 | 显示全部楼层
qq1646544 发表于 2023-8-14 09:32
其他内容注释一下,逐个排查

我现在把设置和进入待机放到main的前面部分,还是会重启
回复

使用道具 举报

2

主题

13

回帖

19

积分

新手上路

积分
19
发表于 2023-8-15 22:09:52 | 显示全部楼层
HAL_PWR_EnterSTANDBYMode() 后面的代码放出来看看。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-7 17:20 , Processed in 0.163492 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表