在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > stm32 低功耗設(shè)計[操作寄存器+庫函數(shù)]

            stm32 低功耗設(shè)計[操作寄存器+庫函數(shù)]

            作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
            stm32的低功耗模式有三種:
            • 睡眠模式(內(nèi)核停止,外設(shè)運(yùn)行)
            • 停機(jī)模式(所有時鐘都停止)
            • 待機(jī)模式(1.8V內(nèi)核電源也關(guān)閉)
            在這三種模式中,最低功耗的是待機(jī)模式,在此模式下,最低只需要2uA左右的電流。整個1.8V供電區(qū)被斷電,PLL、HSI、HSE振蕩器都被關(guān)閉。SRAM和寄存器內(nèi)容丟失。停機(jī)模式是次低功耗的的,其典型的電流損耗在20uA左右。最后就是睡眠模式。
            stm32低功耗一覽表
            這三種低功耗模式,喚醒后程序都會初始化運(yùn)行。在例子中做了一番論證,結(jié)果如此。
            直接操作寄存器
            進(jìn)入待機(jī)模式的通用步驟,其中涉及到2個寄存器,也就是電源控制寄存器(PWR_CR)和電源控制/狀態(tài)寄存器(PWR_CSR)。
            電源控制寄存器(PWR_CR),該寄存器的各位描述如下:
            這是一個低9位有效的寄存器。
            • DBP[8]:取消后備區(qū)域的寫保護(hù) 位 8 在復(fù)位后,RTC和后備寄存器處于被保護(hù)狀態(tài)以防意外寫入。0:禁止寫入RTC和后備寄存器 1:允許寫入RTC和后備寄存器
            • PLS[ 7:5]:PVD電平選擇。 這些位用于選擇電源電壓監(jiān)測器的電壓閥值。
            000:2.2V 100:2.6V 001:2.3V 101:2.7V
            010:2.4V 110:2.8V 011:2.5V 111:2.9V
            • PVDE[4]:電源電壓監(jiān)測器(PVD)使能。0:禁止PVD 1:開啟PVD
            • CSBF[3]:清除待機(jī)位,始終讀出為0。 0:無功效 1:清除SBF待機(jī)位(寫)
            • CWUF[2]:清除喚醒位,始終讀出為0。 0:無功效 1:2個系統(tǒng)時鐘周期后清除WUF喚醒位(寫)
            • PDDS[1]:掉電深睡眠,與LPDS位協(xié)同操作。 0:當(dāng)CPU進(jìn)入深睡眠時進(jìn)入停機(jī)模式,調(diào)壓器的狀態(tài)由LPDS位控制。 1:CPU進(jìn)入深睡眠時進(jìn)入待機(jī)模式。
            • LPDS[0]:深睡眠下的低功耗。PDDS=0時,與PDDS位協(xié)同操作 0:在停機(jī)模式下電壓調(diào)壓器開啟 1:在停機(jī)模式下電壓調(diào)壓器處于低功耗模式

            本文引用地址:http://www.biyoush.com/article/201611/321195.htm
            電源控制寄存器(PWR_CR),該寄存器的各位描述如下:
            低9位有效的寄存器,只用了4位,其他位保留
            • EWUP[8]:使能WKUP引腳 ,在系統(tǒng)復(fù)位時清除這一位。
            • PVDO[2]:PVD輸出 ,當(dāng)PVD被PVDE位使能后該位才有效。
            • SBF[1]:待機(jī)標(biāo)志。
            • WUF[0]:喚醒標(biāo)志。
            待機(jī)函數(shù)實現(xiàn):(參見 system.c文件)

            01//THUMB指令不支持匯編內(nèi)聯(lián)
            02//采用如下方法實現(xiàn)執(zhí)行匯編指令WFI
            03__asmvoidWFI_SET(void)
            04{
            05WFI;
            06}
            07
            08
            09//進(jìn)入待機(jī)模式
            10//參數(shù)說明:
            11// var = 0 ,設(shè)定為睡眠模式
            12// var = 1 ,設(shè)定為停機(jī)模式,電流消耗在20uA左右
            13// var = 2 ,設(shè)定為待機(jī)模式,電流消耗在2uA左右
            14
            15voidSys_Standby(u8 var)
            16{
            17
            18RCC->APB1ENR |= 1<<28;//使能電源時鐘
            19
            20switch(var)
            21{
            22case0:{break; }//WFI進(jìn)入睡眠模式
            23
            24case1:{//PDDS+LPDS+SLEEPDEEP+WFI進(jìn)入停機(jī)模式
            25
            26SCB->SCR |= 1<<2;//使能SLEEPDEEP位 (SYS->CTRL)
            27PWR->CR |= 1<<0;//LPDS置位
            28PWR->CR |= 1<<1;//PDDS置位
            29break;
            30}
            31
            32case2:{//PDDS+SLEEPDEEP+WFI進(jìn)入待機(jī)模式
            33
            34SCB->SCR |= 1<<2;//使能SLEEPDEEP位 (SYS->CTRL)
            35PWR->CR|=1<<1;//PDDS置位
            36break;
            37}
            38}
            39
            40PWR->CR |= 1<<2;//清除Wake-up 標(biāo)志
            41PWR->CSR |= 1<<8;//允許寫入RTC和BKP寄存器
            42WFI_SET();//執(zhí)行WFI指令
            43}
            44
            45
            46//系統(tǒng)軟復(fù)位
            47
            48voidSys_Soft_Reset(void)
            49{
            50SCB->AIRCR =0X05FA0000|(u32)0x04;
            51}
            代碼如下:(system.h 和stm32f10x_it.h等相關(guān)代碼參照stm32 直接操作寄存器開發(fā)環(huán)境配置)
            User/main.c
            01#include
            02#include "system.h"
            03#include "wdg.h"
            04#include "exti.h"
            05
            06#define LED1 PAout(4)
            07#define LED2 PAout(5)
            08
            09#define PWR_MODE_Sleep 0 //開啟睡眠模式
            10
            11#define PWR_MODE_STOP 1 //開啟停機(jī)模式
            12
            13#define PWR_MODE_STANDBY 0 //開啟待機(jī)模式
            14
            15
            16voidGpio_Init(void);
            17
            18intmain(void)
            19{
            20u32 i= 10,j=10;
            21
            22Rcc_Init(9);//系統(tǒng)時鐘設(shè)置
            23
            24Exti_Init(GPIO_A,0,FTIR);//設(shè)置PA1為下降沿觸發(fā),參數(shù)GPIO_x 和 FTIR 在system.h中有定義
            25
            26Nvic_Init(0,0,EXTI0_IRQChannel,0);//設(shè)置外部中斷
            27
            28Gpio_Init();
            29
            30while(i--){
            31
            32LED1 = !LED1;
            33
            34delay(30000);//延時30ms
            35
            36}
            37
            38#if PWR_MODE_Sleep //睡眠模式,外部中斷喚醒后會復(fù)位
            39
            40Sys_Standby(0);
            41
            42#elif PWR_MODE_STOP //停機(jī)模式,外部中斷喚醒,喚醒后復(fù)位
            43
            44Sys_Standby(1);
            45
            46#elif PWR_MODE_STANDBY //待機(jī)模式,由獨(dú)立看門狗喚醒,喚醒后會初始化,LED閃爍5次后,暗一段時間
            47
            48Iwdg_Init(3,2000);//設(shè)置為1.6s內(nèi)不喂狗復(fù)位,使用獨(dú)立看門狗喚醒,喚醒后復(fù)位
            49
            50Sys_Standby(2);
            51
            52#endif
            53
            54
            55while(j--){//這段程序用于檢驗喚醒后是否會繼續(xù)運(yùn)行后面的程序,還是會導(dǎo)致復(fù)位
            56
            57LED2 = !LED2;
            58
            59delay(10000);//延時10ms
            60
            61}
            62}
            63
            64
            65voidGpio_Init(void)
            66{
            67RCC->APB2ENR|=1<<2;//使能PORTA時鐘
            68
            69GPIOA->CRL&=0x0000FFFF;// PA0~3設(shè)置為浮空輸入,PA4~7設(shè)置為推挽輸出
            70GPIOA->CRL|=0x33334444;
            71
            72}
            User/stm32f10x_it.c
            01#include "stm32f10x_it.h"
            02#include "system.h"
            03
            04#define LED1 PAout(4)
            05#define LED2 PAout(5)
            06#define LED3 PAout(6)
            07#define LED4 PAout(7)
            08
            09
            10voidEXTI0_IRQHandler(void)
            11{
            12LED4 = !LED4;
            13EXTI->PR = 1<<0;//清除中斷標(biāo)志位
            14}

            待機(jī)相關(guān)代碼參見 system.c文件中


            上一頁 1 2 下一頁

            評論


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

            關(guān)閉