OpenEdv-开源电子网

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

STM32待机模式RTC唤醒不了?

[复制链接]

2

主题

4

帖子

0

精华

新手入门

积分
32
金钱
32
注册时间
2012-12-19
在线时间
0 小时
发表于 2012-12-19 15:36:23 | 显示全部楼层 |阅读模式
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_GPIO_LED, ENABLE); /*使能LED灯使用的GPIO时钟*/
GPIO_InitStructure.GPIO_Pin = DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN; 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIO_LED, &GPIO_InitStructure); 
   
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);//使能PWR和BKP时钟
PWR_BackupAccessCmd(ENABLE);

RTC_Configuration();
RTC_ClearFlag(RTC_FLAG_SEC);
while(RTC_GetFlagStatus(RTC_FLAG_SEC) == RESET);

    #ifdef WKUP_20000ms 
    RTC_SetAlarm(RTC_GetCounter()+ 327000);
    #endif
    #endif

ADC_Configuration();
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
         RegularConvData = ADC_GetConversionValue(ADC1);
ADC_Cmd(ADC1, DISABLE);
    
GPIO_SetBits(GPIO_LED,DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN);/*关闭所有的LED指示灯*/
RTC_WaitForLastTask(); //使能唤醒管脚功能
PWR_EnterSTANDBYMode(); //进入待机模式
  while(1)
  {
  }  
} 搞了两天,还是没什么头绪,待机20秒后唤醒,但是现在一直就唤醒不了,大虾们 帮小弟来看看啊
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2012-11-30
在线时间
75 小时
发表于 2012-12-19 15:42:30 | 显示全部楼层
回复【楼主位】jaysheng:
---------------------------------
楼主你把RTC_WaitForLastTask(); //使能唤醒管脚功能这句注释掉在看看,我也有过这样的疑惑,用RTC唤醒不要使能唤醒管脚
回复 支持 反对

使用道具 举报

3

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2013-5-2
在线时间
23 小时
发表于 2013-8-7 10:19:48 | 显示全部楼层
回复【2楼】dongdejun1989:
---------------------------------
你们低功耗是 停止模式  还是休眠模式呢?    我是停止模式,用中断方式唤醒,我把外部中断关了,只用rtc中断唤醒也不行  我的设置是

   RCC->APB1ENR|=1<<28;     //使能电源时钟     
RCC->APB1ENR|=1<<27;     //使能备份时钟  
       
PWR->CR|=1<<8;           //取消备份区写保护
RCC->BDCR|=1<<16;        //备份区域软复位    
RCC->BDCR&=~(1<<16);     //备份区域软复位结束
     
    RCC->CSR|=1<<0;         //开启外部低速振荡器 
    while(!(RCC->CSR&0X02));//等待外部时钟就绪

RCC->BDCR|=0x0200;      //LSI作为RTC时钟      
RCC->BDCR|=1<<15;        //RTC时钟使能      
    RTC->CRL &= (u16)(~(1<<3));  
while(!(RTC->CRL&(1<<3)));//等待RTC寄存器同步
                                       
RTC->CRL|=1<<4;              //允许配置  
RTC->RLH=0X0000;
RTC->RLL=32767;          //时钟周期设置(有待观察,看是否跑慢了?)理论值:32767  
RTC->CRL&=~(1<<4);//配置更新
   while(!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成 

RTC->CRH|=0X02;     //允许闹钟中断
while(!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成
          
//    RTC->CRL &= (u16)(~(1<<0));  //清秒标志 
                    
//   RCC->APB1ENR|=1<<28;     //使能电源时钟     
// RCC->APB1ENR|=1<<27;     //使能备份时钟
// PWR->CR|=1<<8;           //取消备份区写保护

RTC->CRL|=1<<4;              //允许配置  
// RTC->CNTH=0; 
// RTC->CNTL=0;
    RTC->ALRH=(((RTC->CNTH << 16)+RTC->CNTL)+5) >> 16;
    RTC->ALRL=(u16)((((RTC->CNTH << 16)+RTC->CNTL)+5) & 0x0000FFFF);//4915; //150ms
RTC->CRL&=~(1<<4);//配置更新
while(!(RTC->CRL&(1<<5)));   //等待RTC寄存器操作完成
           
RCC->APB2ENR|=0x01;//使能io复用时钟
    //自动设置
EXTI->IMR|=1<<17;//  开启line BITx上的中断
EXTI->EMR|=1<<17;//不屏蔽line BITx上的事件 (如果不屏蔽这句,在硬件上是可以的,但是在软件仿真的时候无法进入中断!)
  EXTI->RTSR|=1<<17;//line BITx上事件上升降沿触发  

MY_NVIC_Init(2,5,RTC_IRQChannel,2);//优先级设置
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2013-12-4
在线时间
3 小时
发表于 2013-12-10 17:14:32 | 显示全部楼层
有没结论,我也遇到这个问题。。
回复 支持 反对

使用道具 举报

6

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-7-12
在线时间
2 小时
发表于 2014-11-26 10:12:59 | 显示全部楼层
进入待机或停机模式前要清除相应的标志位
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-28 18:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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