Stm32 RTC周期唤醒待机模式
一、前言
二、开发环境
1、软件:CubeMX+MDK
2、硬件:超纬电子-NB开发板
三、参考资料
四、实现过程
1、配置CubeMX
2、程序修改
2.1、添加 wukeup函数,通过调用函数进入待机模式
void WKUP_EnterStandby(void)
{__HAL_RCC_APB2_FORCE_RESET();__HAL_RCC_PWR_CLK_ENABLE();__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);HAL_PWR_EnterSTANDBYMode();
}
2.2、调用WKUP_EnterStandby()进入待机模式
while(1)
{//{if} 检测按键是否被按下,按键被按下,调用WKUP_EnterStandby()进入待机模式if (KEY_NonBlockingKey2Scan()) { WKUP_EnterStandby();}
}
通过以上简单操作,就完成了RTC定时换新功能,在每次进入待机模式后,延时15秒后会自动唤醒,系统将重新运行,并且在待机的过程中,给PA0已经一个下降沿,即可提前唤醒单片机。
2.3、程序说明
以下代码是cubeMX自动生成的,进行相关说明
//{fun} 每次发生唤醒中断会自动调用此函数处理
void RTC_WKUP_IRQHandler(void)
{/* USER CODE BEGIN RTC_WKUP_IRQn 0 *//* USER CODE END RTC_WKUP_IRQn 0 */HAL_RTCEx_WakeUpTimerIRQHandler(&hrtc);/* USER CODE BEGIN RTC_WKUP_IRQn 1 *//* USER CODE END RTC_WKUP_IRQn 1 */
}void HAL_RTCEx_WakeUpTimerIRQHandler(RTC_HandleTypeDef *hrtc)
{ /* Get the pending status of the WAKEUPTIMER Interrupt */if(__HAL_RTC_WAKEUPTIMER_GET_FLAG(hrtc, RTC_FLAG_WUTF) != RESET){/* WAKEUPTIMER callback */ HAL_RTCEx_WakeUpTimerEventCallback(hrtc);//cubeMX自动帮我们清楚了待机标志位,所以我们在程序中不需要再手动清除/* Clear the WAKEUPTIMER interrupt pending bit */__HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(hrtc, RTC_FLAG_WUTF);}/* Clear the EXTI's line Flag for RTC WakeUpTimer */__HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG();/* Change RTC state */hrtc->State = HAL_RTC_STATE_READY;
}