RTC wake sotp

static void RTC_Config(void)
{
    RTC_InitTypeDef   RTC_InitStructure;
    RTC_TimeTypeDef   RTC_TimeStructure;
    uint32_t LSIFreq = 0;
    RCC_BackupResetCmd(ENABLE);RCC_BackupResetCmd(DISABLE);//增加避免 复位脚引起初始化不通过!
 
    /* Enable the PWR clock */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

    /* Allow access to Backup Domain */
    PWR_BackupAccessCmd(ENABLE);

    /* Disable wake-up source(ALARM) to guarantee free access to WUT level-OR input */
    RTC_ITConfig(RTC_IT_ALRA, DISABLE);

    

    /* Enable wake-up source(ALARM) to guarantee free access to WUT level-OR input */
    RTC_ITConfig(RTC_IT_ALRA, ENABLE);

    /* Enable the LSI OSC */
    RCC_LSICmd(ENABLE);

    /* Wait till LSI is ready */
    while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
    {}
        /* Clear Wakeup flag */
    PWR_ClearFlag(PWR_FLAG_WU);
    /* Check if the StandBy flag is set */
    if (PWR_GetFlagStatus(PWR_FLAG_SB) != RESET)
    {
        /* Clear StandBy flag */
        PWR_ClearFlag(PWR_FLAG_SB);

        /* Check if the StandBy flag is cleared */
        if (PWR_GetFlagStatus(PWR_FLAG_SB) != RESET)
        {
            while (1);
        }

        RTC_WaitForSynchro();

        /* No need to configure the RTC as the RTC config(clock source, enable,
        prescaler,...) are kept after wake-up from STANDBY */
    }
    else
    {
        /* RTC Configuration ******************************************************/
        /* Reset Backup Domain */
        RCC_BackupResetCmd(ENABLE);
        RCC_BackupResetCmd(DISABLE);

        /* Select the RTC Clock Source */
        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);

        /* Enable the RTC Clock */
        RCC_RTCCLKCmd(ENABLE);

        /* Wait for RTC APB registers synchronisation */
        RTC_WaitForSynchro();

        /* Get the LSI frequency:  TIM14 is used to measure the LSI frequency */
        LSIFreq = GetLSIFrequency();

        RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
        RTC_InitStructure.RTC_AsynchPrediv = 99;
        RTC_InitStructure.RTC_SynchPrediv = (LSIFreq / 100) - 1;

        RTC_Init(&RTC_InitStructure);

        /* Set the time to 01h 00mn 00s AM */
        RTC_TimeStructure.RTC_H12     = RTC_H12_AM;
        RTC_TimeStructure.RTC_Hours   = 0x01;
        RTC_TimeStructure.RTC_Minutes = 0x00;
        RTC_TimeStructure.RTC_Seconds = 0x00;

        RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure);
    }
}

/**
  * @brief  Enters STANDBY mode, RTC Alarm within 3 second or an external RESET
  *         will wake-up the system from STANDBY
  * @param  None
  * @retval None
  */
//static void EnterSTANDBYMode(void)
static void EnterSTOPMode(void)
{
    RTC_AlarmTypeDef  RTC_AlarmStructure;
    RTC_TimeTypeDef   RTC_TimeStructure;
        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

    /* Disable the Alarm A */
    RTC_AlarmCmd(RTC_Alarm_A, DISABLE);

    /* Get the current time */
    RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);

    /* Set the alarm to current time + 3s */
    RTC_AlarmStructure.RTC_AlarmTime.RTC_H12     = RTC_TimeStructure.RTC_H12;
    RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours   = RTC_TimeStructure.RTC_Hours;
    RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes = RTC_TimeStructure.RTC_Minutes;
    RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds = (RTC_TimeStructure.RTC_Seconds + 0x5) % 60;
    RTC_AlarmStructure.RTC_AlarmDateWeekDay = 31;
    RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date;
    //RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_DateWeekDay | RTC_AlarmMask_Hours | RTC_AlarmMask_Minutes;
    RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_All-RTC_AlarmMask_Seconds   ;
  
    RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure);
  /* Set AlarmA subseconds and enable SubSec Alarm : generate 8 interripts per Second */
//  RTC_AlarmSubSecondConfig(RTC_Alarm_A, 0xFF, RTC_AlarmSubSecondMask_SS14_5);
  
    /* Enable RTC Alarm A Interrupt: this Interrupt will wake-up the system from
    STANDBY mode (RTC Alarm IT not enabled in NVIC) */
    RTC_ITConfig(RTC_IT_ALRA, ENABLE);

    /* Enable the Alarm A */
    RTC_AlarmCmd(RTC_Alarm_A, ENABLE);

    /* Clear RTC Alarm Flag */
    RTC_ClearFlag(RTC_FLAG_ALRAF);
        
        
//        RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure);

    RTC_ITConfig(RTC_IT_ALRA, ENABLE);

    RTC_AlarmCmd(RTC_Alarm_A, ENABLE);
    RTC_ClearITPendingBit(RTC_IT_ALRA);
    PWR_ClearFlag(PWR_FLAG_WU);
        
        
        
        EXTI_ClearITPendingBit(EXTI_Line17);
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
    EXTI_InitStructure.EXTI_Line = EXTI_Line17;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource14);//PC14_RTC_ALARM_OUT
    /* NVIC configuration */
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
    NVIC_Init(&NVIC_InitStructure);
        
    SysTick->CTRL=0;
    /* Request to enter STANDBY mode (Wake Up flag is cleared in PWR_EnterSTANDBYMode function) */
  //  PWR_EnterSTANDBYMode();
     RTC_ClearITPendingBit(RTC_IT_ALRA); EXTI_ClearITPendingBit(EXTI_Line17);
//    __WFI();//3.4mA
  PWR_EnterSTOPMode(  PWR_Regulator_LowPower, PWR_STOPEntry_WFI  );
}

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-12 09:44:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-12 09:44:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-12 09:44:04       87 阅读
  4. Python语言-面向对象

    2024-01-12 09:44:04       96 阅读

热门阅读

  1. 【设计模式】02-SOLID 设计原则

    2024-01-12 09:44:04       56 阅读
  2. GBASE南大通用系统目录表

    2024-01-12 09:44:04       58 阅读
  3. Wireshark流量分析

    2024-01-12 09:44:04       58 阅读
  4. ftp(1) command

    2024-01-12 09:44:04       55 阅读
  5. 第十九章 类的继承

    2024-01-12 09:44:04       54 阅读
  6. Windows Copilot 更新及使用教程

    2024-01-12 09:44:04       175 阅读
  7. go-zero

    2024-01-12 09:44:04       61 阅读
  8. fastjson2 转换别名 null变空字符串

    2024-01-12 09:44:04       38 阅读
  9. 【Vue技巧】Vue2和Vue3组件上使用v-model的实现原理

    2024-01-12 09:44:04       58 阅读