硬汉嵌入式论坛

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

[有问必答] STM32F103进入待机模式+WEAKUP和RTC闹钟双重唤醒,WEAKUP无法唤醒

[复制链接]

3

主题

10

回帖

19

积分

新手上路

积分
19
发表于 2024-2-1 17:34:19 | 显示全部楼层 |阅读模式
[C] 纯文本查看 复制代码
		RCC_APB2PeriphResetCmd(0x01fc, DISABLE);		//×¼±¸½øÈë´ý»úģʽ£¬¸´Î»ËùÓÐIO£¬½µµÍ¹¦ºÄ(²ÎÕÕÊֲᣬ¸ù¾ÝÐèÒª¸´Î»¶ÔÓ¦IO)
		RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//ÐèÒªÅäÖõçÔ´¿ØÖƼĴæÆ÷£¬ËùÒÔʹÄÜʱÖÓ£¬·ñÔò²»ÄÜÕý³£Ê¹ÓÃÃüÁî½øÈë´ý»ú״̬ºÍ»½ÐÑ
		PWR_WakeUpPinCmd(ENABLE);					//ʹÄÜWKUPÒý½Å»½Ðѹ¦ÄÜ£¬·ñÔòWKUPÒý½ÅÉÏÉýÑز»ÄÜ»½ÐÑ
		RTC_SetAlarm(RTC_GetCounter() + minTim - 3);     //²¹³¥3sÆô¶¯Ê±¼ä
		RTC_WaitForLastTask();
		RTC_ITConfig(RTC_IT_SEC, DISABLE);
//		RTC_ClearITPendingBit(RTC_IT_SEC);
		RTC_ITConfig(RTC_IT_ALR, ENABLE);
		
		PWR_EnterSTANDBYMode();					  //½øÈë´ý»úģʽ



代码如上,单独使用RTC或者WEAKUP都能用,两个加在一起,只有RTC能唤醒,请问可能什么原因导致的???大家有没有遇到过这种情况
回复

使用道具 举报

3

主题

10

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2024-2-2 14:11:07 | 显示全部楼层
问题已经解决
微信截图_20240202135458.png
代码如上,屏蔽设置闹钟及开启闹钟中断前的“RTC_WaitForLastTask(void)”函数;为了保证RTC写寄存器写入成功,我将此函数放在最后,而这个函数官方文件是这么解释的
微信截图_20240202140728.png


要放在写寄存器函数之前调用,而之前只用RTC闹钟唤醒时,我确实也都是放在设置闹钟及开启中断之前的,确实好使,但是加入“PWR_WakeUpPinCmd(ENABLE);”唤醒引脚唤醒后,就会出现问题,进入待机马上就会启动,也不知道什么原因导致启动的,大家感兴趣的可以研究研究

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106649
QQ
发表于 2024-2-2 01:20:32 | 显示全部楼层
这个还真没有实测过。看看坛友有测试过的没
回复

使用道具 举报

3

主题

10

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2024-2-2 08:54:08 | 显示全部楼层
eric2013 发表于 2024-2-2 01:20
这个还真没有实测过。看看坛友有测试过的没

好吧,多谢
回复

使用道具 举报

3

主题

10

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2024-2-2 14:01:09 | 显示全部楼层
[C] 纯文本查看 复制代码
		RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//ÐèÒªÅäÖõçÔ´¿ØÖƼĴæÆ÷£¬ËùÒÔʹÄÜʱÖÓ£¬·ñÔò²»ÄÜÕý³£Ê¹ÓÃÃüÁî½øÈë´ý»ú״̬ºÍ»½ÐÑ
		RTC_SetAlarm(RTC_GetCounter() + minTim - 3);     //²¹³¥3sÆô¶¯Ê±¼ä
//		RTC_ITConfig(RTC_IT_SEC, DISABLE);
		RTC_ITConfig(RTC_IT_ALR, ENABLE);
		RTC_WaitForLastTask();
//		uart3_printf("****½øÈë´ý»ú****");
		RCC_APB2PeriphResetCmd(0x01fc, DISABLE);		//×¼±¸½øÈë´ý»úģʽ£¬¸´Î»ËùÓÐIO£¬½µµÍ¹¦ºÄ(²ÎÕÕÊֲᣬ¸ù¾ÝÐèÒª¸´Î»¶ÔÓ¦IO)
		PWR_WakeUpPinCmd(ENABLE);					//ʹÄÜWKUPÒý½Å»½Ðѹ¦ÄÜ£¬·ñÔòWKUPÒý½ÅÉÏÉýÑز»ÄÜ»½ÐÑ
		PWR_EnterSTANDBYMode();					  //½øÈë´ý»úģʽ


问题已经解决,不能在设置闹钟及设置中断前加“RTC_WaitForLastTask”函数,不知道为什么,反正现在两种唤醒都好使了,而这个函数标准库文件下是这么解释的“This function must be called before any write to RTC registers”,必须在写RTC寄存器前调用,为了保证上次寄存器写完成,我把函数放在了写寄存器函数之后
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 20:20 , Processed in 0.184396 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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