首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stm32f1 RTC报警

stm32f1 RTC报警
EN

Stack Overflow用户
提问于 2021-03-02 20:50:28
回答 1查看 326关注 0票数 0

我使用的是stm32f103RBT6,我想通过使用下面的代码每一小时设置一次RTC警报事件

代码语言:javascript
复制
RTC_Alarm_Time.Alarm = 1;
HAL_RTC_GetTime(&hrtc,&RTC_Time,RTC_FORMAT_BIN);
RTC_Alarm_Time.AlarmTime.Hours=RTC_Time.Hours+1;
if(RTC_Alarm_Time.AlarmTime.Hours>23)
{                                           
    RTC_Alarm_Time.AlarmTime.Hours=0;   
}   
RTC_Alarm_Time.AlarmTime.Minutes=RTC_Time.Minutes;                       
RTC_Alarm_Time.AlarmTime.Seconds=RTC_Time.Seconds;  
HAL_RTC_SetAlarm_IT(&hrtc, &RTC_Alarm_Time, RTC_FORMAT_BIN);                

我的问题是,23小时后,警报在1小时发出,它跳过了0小时。我认为这是因为当我将警报时间设置为0 RTC时,日期仍然是前一天。有没有人有任何代码的例子,我可以使它独立于日期或任何其他方式。谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-02 21:46:40

最新答案:

您的代码中有一个bug。您的代码设置RTC_Alarm_Time.AlarmTime.Hours=RTC_Time.Hours+1,然后检查if(RTC_Time.Hours>23)的小时滚转。请注意,RTC_Time.Hours不是递增的,而是RTC_Alarm_Time.AlarmTime.Hours增加的。因此,当RTC_Time.Hours == 23RTC_Alarm_Time.AlarmTime.Hours = 24RTC_Alarm_Time.AlarmTime.Hours不会被滚动到0时,因为RTC_Time.Hours不大于23。那么对HAL_RTC_SetAlarm_IT()的调用将失败,因为Hours = 24。如果您正在检查HAL_RTC_SetAlarm_IT()的返回值,您就会发现这一点。

您可以通过这样更改条件来修复代码。

代码语言:javascript
复制
if(RTC_Alarm_Time.AlarmTime.Hours>23)

最初的答案(将解决STM32F4上的可疑问题):

我想你是对的,跳过了0小时,因为日期是前一天。您应该忽略日期/日,因为您需要每小时的警报。我认为您可以通过设置RTC_Alarm_Time.AlarmMask = RTC_ALARMMASK_DATEWEEKDAY来忽略日期/日。这应该掩盖(即忽略)日期/日,以便只根据时间、分钟和秒发出警报。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66446947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档