你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

RTC Alarm唤醒standby后获取不到RTC Alarm标志位问题STMF103CBU6芯片

[复制链接]
codepencil 提问时间:2018-2-11 21:33 /
阅读主题, 点击返回1楼
收藏 评论26 发布时间:2018-2-11 21:33
26个回答
codepencil 回答时间:2018-2-12 13:30:57
安 发表于 2018-2-12 11:16
可以考虑判断一下RCC_GetFlagStatus(RCC_FLAG_LPWRRST),这个可以用来判断是否从低功耗模式唤醒。可以从wak ...

用LowPowerReset就不会进入standby了
Low-power management reset
There are two ways to generate a low-power management reset:
1. Reset generated when entering Standby mode:
This type of reset is enabled by resetting nRST_STDBY bit in User Option Bytes. In this
case, whenever a Standby mode entry sequence is successfully executed, the device
is reset instead of entering Standby mode.
废鱼 回答时间:2018-2-12 14:14:30
楼主现在的问题是断电唤醒后,判断不到RTC中断的标志位。我看还配置了wakeup功能,楼主是否开启了wakeup?我说的两个寄存器是关于唤醒的,也可以用来参考一下当时是wakeup唤醒的,还是RTC唤醒的。用于排查一下原因。我记得wakeup唤醒后,需要手动清除一下标志位吧。
codepencil 回答时间:2018-2-12 14:21:30
安 发表于 2018-2-12 14:14
楼主现在的问题是断电唤醒后,判断不到RTC中断的标志位。我看还配置了wakeup功能,楼主是否开启了wakeup? ...

wakeup pin唤醒的标志位在进入standby之前都清除掉了。

void Sys_Enter_Standby_WakeupPin_Enable(void)
{               
        /* Enable PWR and BKP clocks */
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);                 
         
        /* Allow access to BKP Domain */
        PWR_BackupAccessCmd(ENABLE);
   
            RTC_ITConfig(RTC_IT_OW|RTC_IT_SEC,DISABLE);                               
        RTC_ClearITPendingBit(RTC_IT_OW|RTC_IT_ALR|RTC_IT_SEC);       
        PWR_ClearFlag(PWR_FLAG_WU);               
            PWR_WakeUpPinCmd(ENABLE);                 
        PWR_BackupAccessCmd(DISABLE);       
       
        PWR_EnterSTANDBYMode();                       
         
}
wenyangzeng 回答时间:2018-2-12 14:31:26
本帖最后由 wenyangzeng 于 2018-2-12 14:39 编辑
codepencil 发表于 2018-2-12 13:28
......
我在程序里面每次都会重新配置RTC,所以即使是断电在上电后(VBAT接的是VDD),也会重新配以一遍R ...
ST官方例程中:
RTC_Configuration()开头一定要判断BKP_DR0是否是第一次写入值(假设是0x5050)
这个0X0505是第一次配置写入备份寄存器。你断电了就丢失了,还要重新配置的;

uint8_t RTC_Configuration(void)
if(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
                                RCC_LSEConfig(RCC_LSE_ON);
        if(RTC_ReadBackupRegister(RTC_BKP_DR0)!=0x5050)                //是否第一次配置?
        {
                RCC_LSEConfig(RCC_LSE_ON);//LSE 开启


楼主这个RTC例程如果不配置后备电池就没意义了。
废鱼 回答时间:2018-2-12 14:42:00
读取不到RTC的唤醒,是否可以考虑一下是其他唤醒引起的呢?最好看一下相关的几个寄存器。这里是清除掉了,但是不能保证下次唤醒是不是wakeup唤醒。
codepencil 回答时间:2018-2-12 15:38:23
wenyangzeng 发表于 2018-2-12 14:31
ST官方例程中:
RTC_Configuration()开头一定要判断BKP_DR0是否是第一次写入值(假设是0x5050)
这个0X0505 ...

对,我没有在backup寄存器放标识,所以我每次起来都有重新配置程序;
codepencil 回答时间:2018-2-12 15:44:07
安 发表于 2018-2-12 11:16
可以考虑判断一下RCC_GetFlagStatus(RCC_FLAG_LPWRRST),这个可以用来判断是否从低功耗模式唤醒。可以从wak ...

就是翻了几遍手册,不知道再去那里判断,能在同时开了WakeUpPin唤醒和RTC Alarm唤醒的同时区分开WakeUpPin唤醒和RTC Alarm唤醒,
所以来劳烦各位大神;

截图20180212153937.png
codepencil 回答时间:2018-2-12 15:53:11
wenyangzeng 发表于 2018-2-12 14:31
ST官方例程中:
RTC_Configuration()开头一定要判断BKP_DR0是否是第一次写入值(假设是0x5050)
这个0X0505 ...

您理解错了,我没有独立给VBAT供电,但是VDD是一直接在VBAT上的
废鱼 回答时间:2018-2-12 16:20:25
我之前也遇到过类似的问题,后来改成STOP模式来解决。楼主可以判断一下exit的寄存器,看一下是否可以从这里来判断一下。
codepencil 回答时间:2018-2-13 08:46:09
安 发表于 2018-2-12 16:20
我之前也遇到过类似的问题,后来改成STOP模式来解决。楼主可以判断一下exit的寄存器,看一下是否可以从这里 ...

估计standby是无望了,今天试试STOP。
翻滚吧小小牛 回答时间:2019-2-18 16:00:17
相同的问题,请教楼主最后是怎么解决的?。。。
supercctv 回答时间:2020-2-6 16:55:25
前两天刚好做低功耗,我来回答下这个问题吧。
首先答案是:stm32F103,在待机模式(standby)下,无法区分rtc唤醒和wakeuppin唤醒。
在待机模式(standby)下唤醒后,除:电源控制/状态寄存器(PWR_CSR)。
而,电源控制/状态寄存器(PWR_CSR),只有一个WUF标志,这个标志为1表示:在WKUP引脚上发生唤醒事件或出现RTC闹钟事件。
所以无法再细分是WKUP引脚上发生唤醒事件,还是出现RTC闹钟事件。
12

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版