STM32L431单片机RTC的两种中断模式总结

本文介绍了在STM32L431单片机中,如何利用HAL库实现数据上报后的低功耗管理。如果数据上报成功,设备进入低功耗模式;若不成功,则通过RTC设置闹钟或周期唤醒功能,在10分钟后唤醒以重新上报数据。提出了RTC闹钟功能和RTC WakeUp功能两种解决方案,并详细阐述了设置步骤、中断处理及注意事项,如RTC时间获取的顺序要求等。
摘要由CSDN通过智能技术生成

单片机型号:stm32L431
库函数:HAL库

项目需求: 单片机进行数据上报后,如果数据上报成功进入低功耗,当天不在上报数据,如果不成功进入低功耗,10分钟后进行RTC唤醒,再次联网上报数据
RTC10分种后唤醒解决方案:
方案1:使用RTC闹钟功能:再进低功耗前先获取当前RTC的时间,在当前时间上加10分钟,算出唤醒时间,然后设置RTC闹钟唤醒时间,
设置函数:HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BCD)
中断函数:void RTC_Alarm_IRQHandler(void)
方案2:使用RTC的WakeUp功能,最大计数值可以设置0x1FFFF,根据时钟频率可以任意调整延时唤醒时间,如果时1HZ的RTC计数频率,最大延时唤醒时间(0x1FFFF+1)*1/60/60=36小时
设置函数: HAL_RTCEx_SetWakeUpTimer_IT(&hrtc,600,RTC_WAKEUPCLOCK_CK_SPRE_16BITS);//RTC600秒后唤醒
中断函数 : void RTC_WKUP_IRQHandler(void)
关闭周期唤醒函数: HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);//关闭RTC周期唤醒

注意事项:

  1. 在进行RTC闹钟设置时,不能只调用(HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BCD) != HAL_OK)函数,这样会导致闹钟设置失败,要重新配置RTC才会设置成功
    void RTC_WakeUp(void)
    {
    if(gNetInfo.uploadTimeUpdate!=1)//
    return;

RTC_AlarmTypeDef sAlarm = {0};
// #if TEST
// gImportInfo.alarm.hour=0;
// gImportInfo.alarm.minute=0;
// gImportInfo.alarm.second=40;
// #endif
sAlarm.AlarmTime.Hours = gImportInfo.alarm.hour;
sAlarm.AlarmTime.Minutes = gImportInfo.alarm.minute;
sAlarm.AlarmTime.Seconds = gImportInfo.alarm.second;
sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
sAlarm.AlarmMask = RTC_ALARMMASK_DATEWEEKDAY;
sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_NONE;
sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_WEEKDAY;
// sAlarm.AlarmDateWeekDay = 0x1;
sAlarm.Alarm = RTC_ALARM_A;
if (HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BCD) != HAL_OK)
{
Error_Handler();
}
gNetInfo.uploadTimeUpdate=0;

}
2.再获取RTC时间或者日期时,必须先获取时间,再获取日期,顺序不能颠倒(会获取失败),而且时间和日期调用的时候不能单独调用,必须两个同时调用,不然下次获取的时间和日期会出错
HAL_RTC_GetTime(&hrtc, &pTime, RTC_FORMAT_BCD);//获取时间
HAL_RTC_GetDate(&hrtc, &pDate, RTC_FORMAT_BCD);//获取日期
3.RTC周期唤醒函数,进低功耗前打开,出低功耗后关闭,不然程序正常运行时,也会进 RTC周期唤醒中断函数,干扰软件正常运行

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值