STM32 HAL库 CubeMX 低功耗STOP模式,RTC定时5分钟发送一次数据然后进入休眠,实测待机电流5.6uA(二)

本文详细解析了STM32实时钟(RTC)的闹钟功能实现过程,强调了HAL库初始化的重要性,避免读取日期和时间失败导致的闹钟设置问题。通过示例代码展示了如何设置闹钟中断,更新闹钟时间,并处理秒、分、小时的进位逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
HAL_Init();//如果不初始化HAL,会导致概率性读取日期、时间失败,从而导致下次闹钟设置失败,进而导致第二天这个时间才能唤醒。切记!

void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
	HAL_Init();//如果不初始化会导致概率性读取日期、时间失败
	//置位数据发送标志
    Sendlag = 1;
	//printf("HAL_RTC_AlarmAEventCallback\n");
	//必须要读取时间和日期,才能获得准确的时间和日期,还需要先读时间后读日期
	RTC_TimeTypeDef Time;
	RTC_DateTypeDef Date;

    HAL_RTC_GetTime(hrtc, &Time, RTC_FORMAT_BIN);
    HAL_RTC_GetDate(hrtc, &Date, RTC_FORMAT_BIN);
    sAlarm.AlarmTime.Hours = Time.Hours + CLOCKHOURS;
    sAlarm.AlarmTime.Minutes = Time.Minutes + CLOCKMINUTES;
    sAlarm.AlarmTime.Seconds = Time.Seconds + 0;
    sAlarm.AlarmTime.SubSeconds = Time.SubSeconds + 0;

	if (sAlarm.AlarmTime.Seconds > 59)
	{
	   sAlarm.AlarmTime.Seconds -= 60;
	   sAlarm.AlarmTime.Minutes += 1;
	}

	if ( sAlarm.AlarmTime.Minutes >59)
	{
	   sAlarm.AlarmTime.Minutes -= 60;
	   sAlarm.AlarmTime.Hours += 1;
	}
	if (sAlarm.AlarmTime.Hours > 23)
	{
	   sAlarm.AlarmTime.Hours -= 24;
	}
    
  
    if (HAL_RTC_SetAlarm_IT(hrtc, &sAlarm, RTC_FORMAT_BIN) != HAL_OK)//使能闹钟中断
    {
      Error_Handler();
    }
}
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值