前言
不必害怕未知,無需恐懼犯錯,做一個Creator!
本文主要介紹STM32_HAL庫開發中低功耗喚醒的使用,
一、開發步驟
1.STM32CubeMX配置
- 在左側引腳配置處勾選RTC進行配置
- 在RTC模式處勾選“Wakeup”喚醒使能RTC喚醒模式
- 在RTC引數配置處進行引數配置:RTC時鐘、Wakeup喚醒時鐘、Wakeup喚醒計數器以及勾選”NVIC Settings”使能外部中斷

2.進低功耗程式撰寫
void startSleep(uint32_t _RTCsecond) //進入低功耗模式函式
{
SystemPower_Config();
HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);//關閉計數器
RTCWakeUp(_RTCsecond);//自定義喚醒計數器
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);//進入低功耗停機模式
}
void SystemPower_Config(void) //進入低功耗時鐘配置
{
GPIO_InitTypeDef GPIO_InitStructure = {0};
//使能低功耗模式時鐘
__HAL_RCC_PWR_CLK_ENABLE();
//關閉所有IO口時鐘
__HAL_RCC_GPIOA_CLK_DISABLE();
__HAL_RCC_GPIOB_CLK_DISABLE();
__HAL_RCC_GPIOC_CLK_DISABLE();
__HAL_RCC_GPIOD_CLK_DISABLE();
__HAL_RCC_GPIOH_CLK_DISABLE();
__HAL_RCC_GPIOE_CLK_DISABLE();
}
3.出低功耗程式撰寫
void initAfterSleep(void)
{
//各個初始化配置
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART2_UART_Init();
MX_SPI1_Init();
MX_TIM2_Init();
MX_UART4_Init();
MX_RTC_Init();
MX_USART1_UART_Init();
__HAL_UART_ENABLE_IT(&huart4, UART_IT_RXNE);
__HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);
HAL_TIM_Base_Init(&htim2);
HAL_TIM_Base_Start_IT(&htim2);
//回呼函式的初始化非常重要!
HAL_UART_MspInit(&huart1);
HAL_UART_MspInit(&huart2);
HAL_UART_MspInit(&huart4);
HAL_SPI_MspInit(&hspi1);
}
二、主要函式介面
1. HAL庫進入低功耗模式函式
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
進入低功耗模式的介面,執行該函式后進入低功耗模式,
2. HAL庫喚醒計數器設定函式
RTCWakeUp(RTCsecond);
開發人員可根據需要自定義中斷喚醒計數值,
根據已經在STM32CubeMX中配置的Wakeup時鐘頻率和計數值設定低功耗時間,
3. HAL庫RTC喚醒引數配置函式
HAL_RTCEx_SetWakeUpTimer_IT(RTC_HandleTypeDef *hrtc, uint32_t WakeUpCounter, uint32_t WakeUpClock)
RTC喚醒的引數進行配置(STM32CubeMX需要進行首次配置),
對RTC喚醒的時鐘和計數值進行配置,
三、注意事項
1. 待機模式喚醒:
1.喚醒形式直接產生中斷就能喚醒,
2.喚醒后不會進入中斷函式
3.喚醒后程式復位,重新執行
2. 停機模式喚醒:
1.需要對標志位清除,并且時鐘要重新配置,
2.喚醒后進入中斷函式
3.喚醒后程式從停機的位置繼續運行,沒有復位,單片機暫存器里的各種變數值仍然保留!
總結
本專案中低功耗喚醒的使用主要可以歸納為:
1.RTC低功耗喚醒引數配置
2.呼叫void startSleep(uint32_t _RTCsecond)進低功耗模式程式
3.呼叫void initAfterSleep(void)配置出低功耗模式
提示:若有錯誤不足,歡迎批評指正,該系列文章僅供參考,歡迎互相學習交流,
感謝你的閱讀,期待你的關注收藏點贊!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/57514.html
標籤:其他
