stm32晶元休眠模式 stm32實現待機喚醒

2021-10-13 08:10:52 字數 1309 閱讀 7075

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...