新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32之RTC鬧鐘喚醒停機模式

        STM32之RTC鬧鐘喚醒停機模式

        作者: 時間:2016-11-28 來源:網絡 收藏
        費了九牛二虎之力,終于搞出來這個RTC鬧鐘喚醒停機模式了,發現有以下幾點:
        1,停機模式下秒中斷不能用;
        2,每次鬧鐘中斷后,要重新賦值,否則不會再進中斷;
        3,網上很多關于鬧鐘叫醒休眠模式的例程,后來發現,使能的都是秒中斷,不是鬧鐘中斷,根本不行;
        4,發現鬧鐘中斷使能后,如果使能了秒中斷,則秒中斷標志會置位:
        void RTCAlarm_IRQHandler()//RTC_IRQHandler(void)
        {
        feed_dog();
        if(RTC_GetITStatus(RTC_IT_SEC)!= RESET)
        {
        // g_bRTCAlarm = 1;
        feed_dog();
        RTC_ClearITPendingBit(RTC_IT_SEC);
        RTC_WaitForLastTask();
        }
        if(RTC_GetITStatus(RTC_IT_ALR) != RESET)
        {
        g_bRTCAlarm = 1;
        EXTI_ClearITPendingBit(EXTI_Line17);
        if(PWR_GetFlagStatus(PWR_FLAG_WU) != RESET)
        {
        PWR_ClearFlag(PWR_FLAG_WU);
        }
        RTC_WaitForLastTask();
        RTC_ClearITPendingBit(RTC_IT_ALR);
        RTC_WaitForLastTask();
        }
        }
        //void RTC_IRQHandler()//RTC_IRQHandler(void)
        //{
        // if(RTC_GetITStatus(RTC_IT_SEC) != RESET)
        // {
        //
        //// g_bRTCAlarm = 1;
        // feed_dog();
        //
        // RTC_ClearITPendingBit(RTC_IT_SEC);
        //
        // RTC_WaitForLastTask();
        // }
        //}
        如果打開下面函數:
        // NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
        // NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        // NVIC_Init(&NVIC_InitStructure);
        則秒中斷就會進來;
        還有,通過上面這個NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;我才剛認識到他就是傳遞中斷向量地址的。


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 鄂托克旗| 望江县| 上饶县| 沧源| 台北县| 游戏| 吴堡县| 绥棱县| 资兴市| 盐山县| 阜南县| 余干县| 宾川县| 日土县| 天祝| 定兴县| 油尖旺区| 新乐市| 马龙县| 积石山| 天柱县| 鱼台县| 东阳市| 安图县| 广南县| 河池市| 电白县| 项城市| 垣曲县| 平远县| 锡林浩特市| 云林县| 文登市| 临泽县| 新蔡县| 白银市| 安平县| 瑞昌市| 云梦县| 鹤山市| 和田市|