stm32 RTC唤醒standby模式总结

发布于 2018-08-21  519 次阅读


关于stm32 RTC使用的一些注意事项

使用stm32cubeMX生成的RTC程序,需要注意以下几点:

1、RTC在初始化时间的时候使用RTC_FORMAT_BCD(即16进制),这是因为cubemx的参数设置采用16进制

2、使用RTC的wakeup和alarm功能时,需要开启line中断,否则初始化时,将不会打开唤醒中断,因此将没有办法将单片机从待机模式唤醒,如果不想使用line中断,可以手动将初始化函数修改成中断初始化,但是没有中断服务函数,依然可以正常唤醒

HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BCD);
HAL_RTCEx_SetWakeUpTimer_IT(&hrtc,60,RTC_WAKEUPCLOCK_CK_SPRE_16BITS);

3、RTC的wakeup和alarm需要在每次唤醒时都要进行设置,否则,下一次将不会把单片机从待机状态唤醒,这有可能时某些标志没有清空导致的(猜测),重新配置后,可以正常唤醒。

4、使用BKP寄存器检测是否是第一次上电的方法:

if(HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1) != 0xf2f3)
{
    HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,0xf2f3);
}

5、检测当前的唤醒源是哪一种的方法:

if(__HAL_RTC_WAKEUPTIMER_GET_FLAG(&hrtc, RTC_FLAG_WUTF) != RESET)
{    
    printf("RTC wakeup.\n");
}
if(__HAL_RTC_WAKEUPTIMER_GET_FLAG(&hrtc, RTC_FLAG_ALRAF) != RESET)
{			 
    printf("RTC alarm A wakeup.\n");
}

 


一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。