新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32三種低功耗模式研究二

        STM32三種低功耗模式研究二

        作者: 時間:2016-11-28 來源:網絡 收藏
        停機模式:任一外部中斷可以喚醒,系統保存代碼運行狀態,喚醒前后要分別進行電源管理配置和時鐘配置。
        如果不配置時鐘,它是自動切換到內部時鐘的;當然,如果系統重啟或重新上電,則系統會從頭開 始,當然包括從頭配置時鐘。
        示例:
        停機模式進入之前:
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
        printf("進入停止模式 ");
        PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
        停機模式喚醒之后:
        void SYSCLKConfig_STOP(void)
        {
        ErrorStatus HSEStartUpStatus;
        RCC_HSEConfig(RCC_HSE_ON);
        HSEStartUpStatus = RCC_WaitForHSEStartUp();
        if(HSEStartUpStatus == SUCCESS)
        {
        RCC_PLLCmd(ENABLE);
        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
        {
        }
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
        while(RCC_GetSYSCLKSource() != 0x08)
        {
        }
        }
        }
        為了驗證程序喚醒后是不是從進入停機模式那一條語句接著運行,我進行如下編程:
        int main(void)
        {
        LED_GPIO_Config();
        EXTI_Key_Config();
        SysTick_Init();
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//電源管理
        while(1)
        {
        LED1( ON );
        Delay_us(100000); // 10000 * 10us = 100ms
        LED1( OFF );
        // SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
        PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
        LED2( ON );
        Delay_us(100000); // 10000 * 10us = 100ms
        LED2( OFF );
        LED3( ON );
        Delay_us(100000); // 10000 * 10us = 100ms
        LED3( OFF );
        }
        }
        發現根本不進入停機模式,文檔上寫著:為了進入停止模式,所有的外部中斷的請求位(掛起寄存器(EXTI_PR))和RTC的鬧鐘標志都必須被清除,否則停止模式的進入流程將會被跳過,程序繼續運行。我看看外部中斷的標志也都請了啊,怎么回事?進一步研究發現,SysTick_Init()里面并沒有打開systick,而是在Delay_us(100000)里面打開的,那么我在進入停機之前應該關掉,所以把上述程序中的SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk打開就好啦,嘎嘎!



        關鍵詞: STM32低功耗模

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 麦盖提县| 景宁| 云霄县| 鄂托克旗| 金华市| 巴林右旗| 延川县| 若尔盖县| 顺义区| 东光县| 六安市| 古交市| 天门市| 南澳县| 山丹县| 宣化县| 清徐县| 澎湖县| 治多县| 平利县| 兴山县| 武穴市| 扶余县| 海原县| 边坝县| 贺州市| 苏尼特右旗| 祁门县| 榆林市| 光泽县| 绿春县| 秦皇岛市| 兴仁县| 大安市| 沁阳市| 东方市| 江城| 沙田区| 讷河市| 连江县| 郯城县|