stm32 HAL 低功耗模式

2021-10-11 09:17:11 字數 2404 閱讀 3691

最近學習了stm32的低功耗模式, 發現很多可以學習的地方, 微控制器功耗要低才能續航很久

低功耗模式  -如果是中斷就先執行中斷的程式,然後執行上次停下的**

這種模式感覺只有在等待中斷時候才有用, 比如sleep(1), 不過功耗不是降太多

只有靠外部中斷喚醒或者rtc定時器和看門狗喚醒

因為rtc的鬧鐘中斷是接到外部中斷的, 所以也算是外部中斷

這種模式適合長時間休眠, 用rtc來喚醒, 比如1分鐘喚醒一次, 餵狗 然後馬上休眠

待機模式,   這種模式功耗最低  這種模式適合長按開機長按關

// 進入低功耗模式  -如果是中斷就先執行中斷的程式,然後執行上次停下的**

void module_pwr_enter_sleep_mode(void)

// 進入stop模式,靠外部中斷喚醒

void module_pwr_enter_stop_mode(void)

// 進入待機模式

void module_pwr_enter_standby_mode(void)

// stop模式喚醒, 配置時鐘

void module_pwr_stop_mode_wake(void)

; rcc_clkinittypedef rcc_clkinitstruct = ;

rcc_periphclkinittypedef periphclkinitstruct = ;

/** configure the main internal regulator output voltage

*/__hal_rcc_pwr_clk_enable();

__hal_pwr_voltagescaling_config(pwr_regulator_voltage_scale1);

/** initializes the rcc oscillators according to the specified parameters

* in the rcc_oscinittypedef structure.

*/rcc_oscinitstruct.oscillatortype = rcc_oscillatortype_lsi|rcc_oscillatortype_hse

|rcc_oscillatortype_lse;

rcc_oscinitstruct.hsestate = rcc_hse_on;

rcc_oscinitstruct.lsestate = rcc_lse_on;

rcc_oscinitstruct.lsistate = rcc_lsi_on;

rcc_oscinitstruct.pll.pllstate = rcc_pll_on;

rcc_oscinitstruct.pll.pllsource = rcc_pllsource_hse;

rcc_oscinitstruct.pll.pllm = 25;

rcc_oscinitstruct.pll.plln = 336;

rcc_oscinitstruct.pll.pllp = rcc_pllp_div2;

rcc_oscinitstruct.pll.pllq = 4;

if (hal_rcc_oscconfig(&rcc_oscinitstruct) != hal_ok)

/** initializes the cpu, ahb and apb buses clocks

*/rcc_clkinitstruct.clocktype = rcc_clocktype_hclk|rcc_clocktype_sysclk

|rcc_clocktype_pclk1|rcc_clocktype_pclk2;

rcc_clkinitstruct.sysclksource = rcc_sysclksource_pllclk;

rcc_clkinitstruct.ahbclkdivider = rcc_sysclk_div1;

rcc_clkinitstruct.apb1clkdivider = rcc_hclk_div4;

rcc_clkinitstruct.apb2clkdivider = rcc_hclk_div2;

if (hal_rcc_clockconfig(&rcc_clkinitstruct, flash_latency_5) != hal_ok)

periphclkinitstruct.periphclockselection = rcc_periphclk_rtc;

periphclkinitstruct.rtcclockselection = rcc_rtcclksource_lse;

if (hal_rccex_periphclkconfig(&periphclkinitstruct) != hal_ok)

// 恢復系統時鐘

hal_resumetick();

}

機這種操作

STM32低功耗模式 停止模式

停止模式是在cortex m3的深睡眠模式基礎上結合了外設的時鐘控制機制,在停止模式下電壓調節器可執行在正常或低功耗模式。此時在1.8v供電區域的的所有時鐘都被停止,pll hsi和hse rc振盪器的功能被禁止,sram和暫存器內容被保留下來。thumb指令不支援彙編內聯 採用如下方法實現執行彙編...

STM32HAL 紅外遙控(NEC)

整理了乙個nec協議的紅外程式,nec協議,物理環境為f103原子戰艦v3,使用stm32cubemx生成初始程式。定時器配置72分頻,9999裝載值 10ms nec協議 資料格式 同步碼頭 位址碼 位址反碼 按鍵碼 按鍵反碼 lsb先行 同步碼頭 9ms低電平 4.5ms高電平 連發碼 9ms低...

STM32 HAL庫學習筆記

1 系統時鐘 一般用stm32cube生成,使用者只需要會用stm32cube就行。2 gpio輸出void led gpio config void 3 gpio輸入void key gpio config void 4 外部中斷void exti key config void void ext...