RTC

STM32F103ZET6设置RTC闹钟,当倒计时到来时无法跳出中断程序

首先,STM32F103ZET6 在CUBE没有 RTC alarm interrupt through EXIT line17的设置

image.png

(如上划线部分是没有的)

但在生成的工程中有提供中断函数:HAL_RTC_SetAlarm_IT(&hrtc,&sAlarm, RTC_FORMAT_BIN);


问题来了,我设置了RTC闹钟并用HAL_RTC_SetAlarm_IT设置并开启了闹钟中断,程序开始时正常运行,但在闹钟设置的时间到来时,程序停止了。(例如我设置了PrintfTime,每秒打印一次实时时间,在开始时正常运行,但闹钟时间到来时,便停止了打印),并且一直无法进入:HAL_RTC_AlarmAEventCallback闹钟中断回调函数。


本人菜鸟刚开始学STM32,很多时候是在网上找例程照做,对底层驱动不太懂。目前能想到的是:有没有可能是RTC_global_interrupt 的中断优先级高于闹钟的优先级,导致无法进入闹钟中断回调函数?但没有地方能设置闹钟的中断优先级?能停在闹钟设置的时间点又为什么会跑不出来呢?希望有懂的大神指点指点,感谢!

以下是部分代码:

设置闹钟:

void setalarm(int hours,int minutes,int seconds)
{
  /*Fill in alarm structure variable*/
 HAL_RTC_GetTime(&hrtc, &stime, RTC_FORMAT_BIN);  //Get time when setting interrupt
 sAlarm.Alarm=RTC_ALARM_A;
 sAlarm.AlarmTime.Hours=hours+stime.Hours;
 sAlarm.AlarmTime.Minutes=minutes+stime.Minutes;
 sAlarm.AlarmTime.Seconds=seconds+stime.Seconds;


 HAL_RTC_SetAlarm_IT(&hrtc,&sAlarm, RTC_FORMAT_BIN);

}


循环打印时间:

void PrintfTime(void)
{
 RTC_DateTypeDef pdate;
 RTC_TimeTypeDef ptime;
 
 HAL_RTC_GetTime(&hrtc, &ptime, RTC_FORMAT_BIN);
 HAL_RTC_GetDate(&hrtc, &pdate, RTC_FORMAT_BIN);
 printf("d/d/d/d\r\n",2000 + pdate.Year, pdate.Month, pdate.Date, pdate.WeekDay);
 printf("d:d:d\r\n",ptime.Hours, ptime.Minutes, ptime.Seconds);
}


以上:如需其他资料可回复,我会尽量补充,谢谢!


已邀请:

要回复问题请先登录注册