資源簡介
使用RTC喚醒低功耗三種模式,實測功耗為1UA左右,sleep模式下功耗為1MA左右。

代碼片段和文件信息
/*
*********************************************************
**?Filename:?stop_mode.c
**?Abstract:?使用STM32L151C8T6MCU,使用RTC喚醒STOP和STANDBY模式下的低功耗低功耗時長可以人為的進行設置
** 設置低功耗時長時請參考頭文件中關于時長的宏定義
**?使用注意事項:使用CubeMX生成函數時,在main()函數后會自動生成SystemClock_Config()函數,此程序中調用了該函數。
** 如果該函數在其他文件中,請將該.h文件加入,以免發生錯誤;
**?Date?:?2018-01-04?
**?Author:王翔武
*********************************************************
*/
/*?Includes?------------------------------------------------------------------*/
#include?“pwr_mode_rtc.h“
#include?“main.h“
RTC_HandleTypeDef?RTCHandle; //RTC結構體變量
//進入STOP模式低功耗,使用RTC功能喚醒,其中stoptime單位為S,如設置1,低功耗1秒后喚醒
void?enter_stop_rtc(float?stoptime)
{
uint32_t?i; //局部變量,用于計算低功耗時長
system_power_config();
????/*?Disable?Wakeup?Counter?*/
????HAL_RTCEx_DeactivateWakeUpTimer(&RTCHandle);
/*To?configure?the?wake?up?timer?to?4s?the?WakeUpCounter?is?set?to?0x242B:
RTC_WAKEUPCLOCK_RTCCLK_DIV?=?RTCCLK_Div16?=?16?
Wakeup?Time?base?=?16?/(~37KHz)?=?~0432?ms
Wakeup?Time?=?~5s?=?0432ms??*?WakeUpCounter
==>?WakeUpCounter?=?~5s/0432ms?=?11562?*/
i?=?stoptime*2396;
????HAL_RTCEx_SetWakeUpTimer_IT(&RTCHandle?i?RTC_WAKEUPCLOCK_RTCCLK_DIV16);
????
????/*?Enter?Stop?Mode?*/
????HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON?PWR_STOPENTRY_WFI);
SystemClock_Config();
}
//進入STANDBY模式低功耗,使用RTC功能喚醒,其中standbytime單位為S,如設置1,低功耗1秒后喚醒
void?enter_standby_rtc(float?standbytime)
{
uint32_t?i; //局部變量,用于計算低功耗時長
system_power_config();
if(__HAL_PWR_GET_FLAG(PWR_FLAG_SB)?!=?RESET)
{
/*?Clear?Standby?flag?*/
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);?
}
??
????/*?Disable?Wakeup?Counter?*/
????HAL_RTCEx_DeactivateWakeUpTimer(&RTCHandle);
/*To?configure?the?wake?up?timer?to?4s?the?WakeUpCounter?is?set?to?0x242B:
RTC_WAKEUPCLOCK_RTCCLK_DIV?=?RTCCLK_Div16?=?16?
Wakeup?Time?base?=?16?/(~37KHz)?=?~0432?ms
Wakeup?Time?=?~5s?=?0432ms??*?WakeUpCounter
==>?WakeUpCounter?=?~5s/0432ms?=?11562?*/
i?=?standbytime*2396;
????HAL_RTCEx_SetWakeUpTimer_IT(&RTCHandle?i?RTC_WAKEUPCLOCK_RTCCLK_DIV16);
????
/*?Clear?all?related?wakeup?flags?*/
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
?/*?Enter?the?Standby?mode?*/
HAL_PWR_EnterSTANDBYMode();
}
//進入SLEEP模式低功耗,使用RTC功能喚醒,其中sleeptime單位為S,如設置1,低功耗1秒后喚醒
void?enter_sleep_rtc(float?sleeptime)
{
uint32_t?i; //局部變量,用于計算低功耗時長
system_power_config();
????/*?Disable?Wakeup?Counter?*/
????HAL_RTCEx_DeactivateWakeUpTimer(&RTCHandle);
/*To?configure?the?wake?up?timer?to?4s?the?WakeUpCounter?is?set?to?0x242B:
RTC_WAKEUPCLOCK_RTCCLK_DIV?=?RTCCLK_Div16?=?16?
Wakeup?Time?base?=?16?/(~37KHz)?=?~0432?ms
Wakeup?Time?=?~5s?=?0432ms??*?WakeUpCounter
==>?WakeUpCounter?=?~5s/0432ms?=?11562?*/
i?=?sleeptime*2396;
????HAL_RTCEx_SetWakeUpTimer_IT(&RTCHandle?i?RTC_WAKEUPCLOCK_RTCCLK_DIV16);
????
????/*Suspend?Tick?increment?to?prevent?wakeup?by?Systick?interrupt.?
????Otherwise?the?Systick?interrupt?will?wake?up?the?device?within?1ms?(HAL?time?bas
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????5920??2018-01-04?18:18??PWR_RTC低功耗模式代碼\pwr_mode_rtc.c
?????文件????????428??2018-01-04?18:14??PWR_RTC低功耗模式代碼\pwr_mode_rtc.h
?????文件????????337??2018-01-04?19:13??PWR_RTC低功耗模式代碼\低功耗介紹.txt
?????目錄??????????0??2018-01-04?18:22??PWR_RTC低功耗模式代碼
-----------?---------??----------?-----??----
?????????????????6685????????????????????4
- 上一篇:網上招聘信息系統的詳細分析與設計
- 下一篇:數據結構與算法分析城市數據庫的實現
評論
共有 條評論