OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5828|回复: 7

STM32待机模式唤醒:RTC唤醒和PA0外部中断唤醒是否不能同时设置?

[复制链接]

5

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2021-6-25
在线时间
50 小时
发表于 2021-12-10 10:44:11 | 显示全部楼层 |阅读模式
1金钱
实际项目中,需要使STM32进入待机模式,然后设置RTC唤醒和PA0唤醒两种方式去唤醒STM32,
但是测试验证发现,同时设置这两种方式唤醒后,PA0唤醒有效,但是RTC无法唤醒STM32。
若是单独设置一种唤醒方式(RTC or PA0),则没有问题,可以唤醒STM32。
难道RTC唤醒和PA0唤醒不能同时设定?

各位有没有遇到过类似的情况呢?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

668

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1926
金钱
1926
注册时间
2021-8-13
在线时间
262 小时
发表于 2021-12-10 11:07:30 | 显示全部楼层
同时设定,只要达成其中一个的唤醒条件,应该是能唤醒的才对
回复

使用道具 举报

2

主题

592

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1458
金钱
1458
注册时间
2019-7-28
在线时间
137 小时
发表于 2021-12-10 17:25:18 | 显示全部楼层
帮顶        
回复

使用道具 举报

5

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2021-6-25
在线时间
50 小时
 楼主| 发表于 2021-12-10 17:25:34 | 显示全部楼层
本帖最后由 Martin17050041 于 2021-12-10 17:37 编辑

我描述不太具体,重新补充下操作:1. 程序同时设置PA0唤醒和RTC唤醒
2. 手动复位后立即进入待机模式,外部操作令STM32通过PA0上升沿唤醒,并一直保持PA0高电平不变
3. 设置好RTC唤醒时间,令STM32再次进入待机模式,即下次由RTC唤醒(注意:PA0一直保持高电平不变)
4. RTC唤醒时间到,无法唤醒STM32

调试发现,设置好RTC唤醒时间后,若PA0一直保持高电平不变,则无法唤醒STM32,
若令PA0重新变为低电平,则RTC时间到可以唤醒STM32。

是否STM32 PA0为高时,RTC唤醒无效?(STM32本身设计决定的?)
还是需要进行其他配置,才能令其唤醒?

回复

使用道具 举报

5

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2021-6-25
在线时间
50 小时
 楼主| 发表于 2021-12-10 17:38:32 | 显示全部楼层
Tlava 发表于 2021-12-10 11:07
同时设定,只要达成其中一个的唤醒条件,应该是能唤醒的才对

我描述不太具体,重新补充下操作:1. 程序同时设置PA0唤醒和RTC唤醒
2. 手动复位后立即进入待机模式,外部操作令STM32通过PA0上升沿唤醒,并一直保持PA0高电平不变
3. 设置好RTC唤醒时间,令STM32再次进入待机模式,即下次由RTC唤醒(注意:PA0一直保持高电平不变)
4. RTC唤醒时间到,无法唤醒STM32

调试发现,设置好RTC唤醒时间后,若PA0一直保持高电平不变,则无法唤醒STM32,
若令PA0重新变为低电平,则RTC时间到可以唤醒STM32。

是否STM32 PA0为高时,RTC唤醒无效?(STM32本身设计决定的?)
还是需要进行其他配置,才能令其唤醒?
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2021-8-27
在线时间
1 小时
发表于 2022-3-30 12:05:04 | 显示全部楼层
//系统进入待机模式
void Sys_Enter_Standby(void)
{
    __HAL_RCC_AHB1_FORCE_RESET();       //复位所有IO口
       
        while(WKUP_KD);                     //等待WK_UP按键松开(在有RTC中断时,必须等WK_UP松开再进入待机)
   
        __HAL_RCC_PWR_CLK_ENABLE();         //使能PWR时钟
    __HAL_RCC_BACKUPRESET_FORCE();      //复位备份区域
    HAL_PWR_EnableBkUpAccess();         //后备区域访问使能  
       
        //STM32F4,当开启了RTC相关中断后,必须先关闭RTC中断,再清中断标志位,然后重新设置
        //RTC中断,再进入待机模式才可以正常唤醒,否则会有问题.       
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
    __HAL_RTC_WRITEPROTECTION_DISABLE(&RTC_Handler);//关闭RTC写保护
   
    //关闭RTC相关中断,可能在RTC实验打开了
    __HAL_RTC_WAKEUPTIMER_DISABLE_IT(&RTC_Handler,RTC_IT_WUT);
    __HAL_RTC_TIMESTAMP_DISABLE_IT(&RTC_Handler,RTC_IT_TS);
//    __HAL_RTC_ALARM_DISABLE_IT(&RTC_Handler,RTC_IT_ALRA|RTC_IT_ALRB);
   
    //清除RTC相关中断标志位
    __HAL_RTC_ALARM_CLEAR_FLAG(&RTC_Handler,RTC_FLAG_ALRAF|RTC_FLAG_ALRBF);
    __HAL_RTC_TIMESTAMP_CLEAR_FLAG(&RTC_Handler,RTC_FLAG_TSF);
    __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&RTC_Handler,RTC_FLAG_WUTF);
   
    __HAL_RCC_BACKUPRESET_RELEASE();                    //备份区域复位结束
    __HAL_RTC_WRITEPROTECTION_ENABLE(&RTC_Handler);     //使能RTC写保护
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);                   //清除Wake_UP标志
               
                RTC_Init();                     //初始化RTC
                RTC_Set_WakeUp(RTC_WAKEUPCLOCK_CK_SPRE_16BITS,9); //配置WAKE UP中断,10秒钟中断一次  
                __HAL_RTC_TIMESTAMP_ENABLE_IT(&RTC_Handler,RTC_IT_TS);
//    __HAL_RTC_ALARM_ENABLE_IT(&RTC_Handler,RTC_IT_ALRA|RTC_IT_ALRB);
          __HAL_RTC_WAKEUPTIMER_ENABLE_IT(&RTC_Handler,RTC_IT_WUT);
//                RTC_Init();                     //初始化RTC
    HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);           //设置WKUP用于唤醒
    HAL_PWR_EnterSTANDBYMode();                         //进入待机模式     
}
注意,要先配置RTC,后开中断,才能正常定时唤醒,否则唤醒异常
回复

使用道具 举报

8

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
393
金钱
393
注册时间
2019-4-25
在线时间
99 小时
发表于 2022-5-29 20:36:31 | 显示全部楼层
18792151406 发表于 2022-3-30 12:05
//系统进入待机模式
void Sys_Enter_Standby(void)
{

要是不用RTC只用wakeup引脚呢?
回复

使用道具 举报

11

主题

2130

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4727
金钱
4727
注册时间
2015-1-10
在线时间
590 小时
发表于 2022-5-30 10:22:40 | 显示全部楼层
a314825348 发表于 2022-5-29 20:36
要是不用RTC只用wakeup引脚呢?

HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);设置一下就行
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 15:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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