OpenEdv-开源电子网

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

F030 c8t6进入STOP模式后,采用RTC唤醒一次后就直接死机

[复制链接]

31

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
金钱
294
注册时间
2018-5-3
在线时间
69 小时
发表于 2019-12-25 14:49:22 | 显示全部楼层 |阅读模式
2金钱
F030 c8t6进入STOP模式后,采用RTC唤醒一次后就直接死机了,后来就被看门狗复位了。进入stop模式后,在RTC中断中点亮LED,在主程序中熄灭,但是发现没有熄灭,等一会就直接复位了。这是为什么???


I2C_wakeup();
   rtc_init();//RTC初始化
   rtc_wakeup_system(1);//RTC中断设置
   system_entry_sleep();//进入休眠   
   system_init();




   void rtc_init()  //正常运行时采用HSI
{
RTC_InitTypeDef RTC_InitStruct;
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

PWR_BackupAccessCmd(ENABLE);
RCC_LSICmd(ENABLE);//LSI 开启
while (RCC_GetFlagStatus( RCC_FLAG_LSIRDY)==RESET)
{

}

RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);//设选择 LSI 作为 RTC 时钟
RTC_InitStruct.RTC_HourFormat=RTC_HourFormat_24;
RTC_InitStruct.RTC_AsynchPrediv = (uint32_t)0x7F;
RTC_InitStruct.RTC_SynchPrediv = (uint32_t)0xFF;
RTC_Init(&RTC_InitStruct);
RCC_RTCCLKCmd(ENABLE);
RTC_WaitForSynchro();//等待RTC寄存器同步
}
void rtc_wakeup_system(uint8_t seconds)
{
RTC_DateTypeDef RTC_DateStruct;
RTC_TimeTypeDef RTC_TimeStruct;
RTC_AlarmTypeDef RTC_AlarmStruct;
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
/*RTC_DateStruct.RTC_Date=0;
RTC_DateStruct.RTC_Year=0;
RTC_DateStruct.RTC_Month=0;
RTC_TimeStruct.RTC_Seconds=0;
RTC_TimeStruct.RTC_Minutes=0;
RTC_TimeStruct.RTC_Hours=0;
*/
RTC_AlarmStruct.RTC_AlarmDateWeekDay=4;
RTC_AlarmStruct.RTC_AlarmDateWeekDaySel=RTC_AlarmDateWeekDaySel_Date;
RTC_AlarmStruct.RTC_AlarmMask=RTC_AlarmMask_Hours|RTC_AlarmMask_Minutes|RTC_AlarmMask_DateWeekDay;
RTC_AlarmStruct.RTC_AlarmTime.RTC_Seconds=seconds;
RTC_SetDate(RTC_Format_BIN, &RTC_DateStruct);
RTC_SetTime(RTC_Format_BIN, &RTC_TimeStruct);
RTC_AlarmCmd(RTC_Alarm_A,DISABLE);
RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStruct);
RTC_AlarmCmd(RTC_Alarm_A,ENABLE);
RTC_ClearITPendingBit(RTC_IT_ALRA);
RTC_ITConfig(RTC_IT_ALRA,ENABLE);

EXTI_ClearITPendingBit(EXTI_Line17);
EXTI_InitStructure.EXTI_Line = EXTI_Line17;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

}


void rtc_disable(void)
{
RTC_AlarmCmd(RTC_Alarm_A,DISABLE);
RTC_ITConfig(RTC_IT_ALRA,DISABLE);
}
void RTC_IRQHandler()
{

if(RTC_GetITStatus(RTC_IT_ALRA)!=RESET)
{
  LED_Display(0,0,0,0);
  rtc_disable();
  RTC_ClearITPendingBit(RTC_IT_ALRA);
}
// rtc_disable();
RTC_ClearITPendingBit(RTC_IT_WUT);
//RTC_ClearITPendingBit(RTC_IT_ALRA );
EXTI_ClearITPendingBit(EXTI_Line17);
}
   void system_entry_sleep(void)
   {
   
   //使能电源接口时钟
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, DISABLE);
   // RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, DISABLE);
   PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
   LED_Display(1,1,1,1);
   // PWR_EnterSleepMode(PWR_SLEEPEntry_WFI);

}

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-12-26 02:11:11 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-27 00:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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