新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32 的待機(jī)喚醒功能

        STM32 的待機(jī)喚醒功能

        作者: 時(shí)間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
        STM32待機(jī)模式簡介

        很多單片機(jī)都有低功耗模式,STM32也不例外。在系統(tǒng)或電源復(fù)位以后,微控制器處于運(yùn)行狀態(tài)。運(yùn)行狀態(tài)下的HCLK為CPU提供時(shí)鐘,內(nèi)核執(zhí)行程序代碼。當(dāng)CPU不需繼續(xù)運(yùn)行時(shí),可以利用多個(gè)低功耗模式來節(jié)省功耗,例如等待某個(gè)外部事件時(shí)。用戶需要根據(jù)最低電源消耗,最快速啟動(dòng)時(shí)間和可用的喚醒源等條件,選定一個(gè)最佳的低功耗模式。STM32的3種低功耗模

        本文引用地址:http://www.104case.com/article/201611/317045.htm

        STM32的低功耗模式有3種:

        1)睡眠模式(CM3內(nèi)核停止,外設(shè)仍然運(yùn)行)

        2)停止模式(所有時(shí)鐘都停止)

        3)待機(jī)模式(1.8V內(nèi)核電源關(guān)閉)

        在這三種低功耗模式中,最低功耗的是待機(jī)模式,在此模式下,最低只需要2uA左右的電流。停機(jī)模式是次低功耗的,其典型的電流消耗在20uA左右。最后就是睡眠模式了。用戶可以根據(jù)自己的需求來決定使用哪種低功耗模式。

        進(jìn)入待機(jī)模式執(zhí)行步驟

        有4種方式可以退出待機(jī)模式,即當(dāng)一個(gè)外部復(fù)位(NRST引腳)、IWDG復(fù)位、WKUP引腳上的上升沿或RTC鬧鐘事件發(fā)生時(shí),微控制器從待機(jī)模式退出。從待機(jī)喚醒后,除了電源控制/狀態(tài)寄存器(PWR_CSR),所有寄存器被復(fù)位。

        從待機(jī)模式喚醒后的代碼執(zhí)行等同于復(fù)位后的執(zhí)行(采樣啟動(dòng)模式引腳,讀取復(fù)位向量等)。電源控制/狀態(tài)寄存器(PWR_CSR)將會(huì)指示內(nèi)核由待機(jī)狀態(tài)退出。

        在進(jìn)入待機(jī)模式后,除了復(fù)位引腳以及被設(shè)置為防侵入或校準(zhǔn)輸出時(shí)的TAMPER引腳和被使能的喚醒引腳(WK_UP腳),其他的IO引腳都將處于高阻態(tài)。

        進(jìn)入待機(jī)模式的方法,以及設(shè)置WK_UP引腳用于把STM32從待機(jī)模式喚醒的方法。具體步驟如下:

        1)使能電源時(shí)鐘。

        因?yàn)橐渲秒娫纯刂萍拇嫫鳎员仨毾仁鼓茈娫磿r(shí)鐘。在庫函數(shù)中,使能電源時(shí)鐘的方法是:

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//使能PWR外設(shè)時(shí)鐘

        2)設(shè)置WK_UP引腳作為喚醒源。

        使能時(shí)鐘之后后再設(shè)置PWR_CSR的EWUP位,使能WK_UP用于將CPU從待機(jī)模式喚醒。在庫函數(shù)中,設(shè)置使能WK_UP用于喚醒CPU待機(jī)模式的函數(shù)是:

        PWR_WakeUpPinCmd(ENABLE);//使能喚醒管腳功能

        3)設(shè)置SLEEPDEEP位,設(shè)置PDDS位,執(zhí)行WFI指令,進(jìn)入待機(jī)模式。

        進(jìn)入待機(jī)模式,首先要設(shè)置SLEEPDEEP位,接著我們通過PWR_CR設(shè)置PDDS位,使得CPU進(jìn)入深度睡眠時(shí)進(jìn)入待機(jī)模式,最后執(zhí)行WFI指令開始進(jìn)入待機(jī)模式,并等待WK_UP中斷的到來。在庫函數(shù)中,進(jìn)行上面三個(gè)功能進(jìn)入待機(jī)模式是在函數(shù)PWR_EnterSTANDBYMode中實(shí)現(xiàn)的:

        voidPWR_EnterSTANDBYMode(void);

        4)最后編寫WK_UP中斷函數(shù)。

        因?yàn)槲覀兺ㄟ^WK_UP中斷(PA0中斷)來喚醒CPU,所以我們有必要設(shè)置一下該中斷函數(shù),同時(shí)我們也通過該函數(shù)里面進(jìn)入待機(jī)模式。

        通過以上幾個(gè)步驟的設(shè)置,我們就可以使用STM32的待機(jī)模式了,并且可以通過WK_UP來喚醒CPU

        1. voidSys_Standby(void)
        2. {
        3. RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//使能PWR外設(shè)時(shí)鐘
        4. PWR_WakeUpPinCmd(ENABLE);//使能喚醒管腳功能
        5. PWR_EnterSTANDBYMode();//進(jìn)入待命(STANDBY)模式
        6. }
        7. //系統(tǒng)進(jìn)入待機(jī)模式
        8. voidSys_Enter_Standby(void)
        9. {
        10. RCC_APB2PeriphResetCmd(0X01FC,DISABLE);//復(fù)位所有IO口
        11. Sys_Standby();
        12. }



        關(guān)鍵詞: STM32待機(jī)喚醒功

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 辽阳市| 封丘县| 泰州市| 黑龙江省| 陆丰市| 安义县| 浦东新区| 罗平县| 鲁山县| 若尔盖县| 大安市| 华坪县| 凯里市| 江城| 兴城市| 北京市| 米泉市| 富平县| 洪泽县| 杭州市| 吴桥县| 普兰县| 米泉市| 炉霍县| 漳浦县| 峨山| 南江县| 阿拉善盟| 河东区| 奉新县| 墨脱县| 绥芬河市| 运城市| 黄梅县| 彩票| 武城县| 封开县| 富民县| 隆尧县| 乐安县| 威海市|