stm32的低功耗模式有3種:
1、睡眠模式(cm3核心停止,外設仍然執行)
2、停機模式(所有時鐘都停止)
3、待機模式(1.8v核心電源關閉)
進入待機模式的方法,以及設定wk_up引腳用於把stm32從待機模式喚醒的方法
一般步驟如下:
1、設定sleepdeep位
scb_scr的第二位
2、使能電源時鐘,設定wk_up引腳作為喚醒源
因為要配置電源控制暫存器,所以必須先使能電源時鐘。然後再設定pwr_csr的ewup位,使能wk_up用於將cpu從待機模式喚醒。
3、設定 pdds pdds位,執行 wfi 指令,進入待機模式。
通過 pwr_cr 設定 pdds 位,使得 cpu 進入深度睡眠時待機模式,最後執行 wfi指令開始進入待機模式,並等wk_up中斷的到來
4、最後編寫wk_up中斷函式
下面是進入待機模式的**
//進入待機模式
void stand_by(void){
scb->scr |= 1<<2; //設定sleepdeep位
rcc->apb1enr |= 1<<28;//使能電源時鐘
pwr->csr |= 1<<8; //設定wk_up作為喚醒源
pwr->cr |= 1<<1; //設定pdds位,進入深睡眠模式
pwr->cr |= 1<<2; //清除喚醒位
__asm volatile("wfi"); //執行wfi命令
最後實現的現象是,燒入程式,復位後,開始執行程式,進入待機模式,長按wk_up鍵3秒,退出待機模式,重新執行**(從待機模式喚醒後的**執行 等同於復位後**的執行),小燈開始閃爍。
之後如果再次長按wk_up鍵3秒,就會再次進入待機模式。
//wk_up鍵初始化
void wkup_init(void){
rcc->apb2enr |= 1<< 2; //使能gpioa時鐘//設定gpioa為上拉輸入
gpioa->crl &= 0xfffffff0;
gpioa->crl |= 0x00000008;
gpioa->idr |= 1<<0;//中斷配置
ex_nvic_config(gpio_a,0,rtir);//上公升沿有效
if(check_wkup()==0) stand_by();
my_nvic_init(2,2,exti0_irqn,2);//中斷分組
上訴**中非常重要的一句話是:
if(check_wkup()==0) stand_by();
只有加上這句話,才能實現長按喚醒,而不是一按就喚醒。
stm32晶元休眠模式 STM32最小系統簡單介紹
stm32是一款高效能,低功耗,低成本的嵌入式arm晶元,其家族產品大致劃分如圖 stm32型號說明,以stm32f103zet6晶元為例 stm32 f103ze t6arm cortex m核心32位微控制器 晶元系列 增強型席系列 引腳數,fash容量 封裝型別 工作溫度範圍 引腳數取值說明 ...
3 認識STM32晶元(1)
我所使用的stm32實驗板晶元型別是stm32f103vbt6,下面詳細介紹這個晶元的資源。stm32f103vb 使用了高效能的arm cortex m3 32位的risc核心,工作頻率為72mhz,內建高速儲存器 128kb的flash,20kb的ram,cpu能以0等待週期讀寫 豐富的增強i ...
STM32晶元解讀
核心 32位 高效能arm cortex m3處理器 時鐘 高達72m,實際還可以超屏一點點 單週期乘法和硬體除法 儲存器容量 stm32f103zet6 512k flash,64k sram stm32f103rct6 256k flash,48k sram 時鐘,復位和電源管理 2.0 3.6...