gpt4 book ai didi

microcontroller - STM32L151 RTC闹钟中断

转载 作者:行者123 更新时间:2023-12-04 15:13:05 28 4
gpt4 key购买 nike

STM32L151 的 RTC 闹钟中断有问题。我希望我的程序每秒都进入 RTC 警报中断,但它不起作用。我的主要功能:

int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_IWDG_Init();
MX_RTC_Init();
MX_SPI1_Init();
MX_USART1_UART_Init();

__HAL_RTC_ALARM_ENABLE_IT(&hrtc, RTC_IT_ALRA);

while (1)
{

}
}

函数配置RTC:MX_RTC_Init():

void MX_RTC_Init(void)
{
RTC_TimeTypeDef sTime;
RTC_DateTypeDef sDate;
RTC_AlarmTypeDef sAlarm;

hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 127;
hrtc.Init.SynchPrediv = 255;
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
HAL_RTC_Init(&hrtc);

sTime.Hours = 0x14;
sTime.Minutes = 0;
sTime.Seconds = 0;
sTime.TimeFormat = RTC_HOURFORMAT12_AM;
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
HAL_RTC_SetTime(&hrtc, &sTime, FORMAT_BCD);

sDate.WeekDay = RTC_WEEKDAY_WEDNESDAY;
sDate.Month = RTC_MONTH_AUGUST;
sDate.Date = 0x24;
sDate.Year = 0x16;

HAL_RTC_SetDate(&hrtc, &sDate, FORMAT_BCD);

/**Enable the Alarm A
*/
sAlarm.AlarmTime.Hours = 0;
sAlarm.AlarmTime.Minutes = 0;
sAlarm.AlarmTime.Seconds = 0;
sAlarm.AlarmTime.TimeFormat = RTC_HOURFORMAT12_AM;
sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
sAlarm.AlarmMask = RTC_ALARMMASK_SECONDS;
sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
sAlarm.AlarmDateWeekDay = 1;
sAlarm.Alarm = RTC_ALARM_A;
HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, FORMAT_BCD);

}

我使用 CubeMX 创建了项目。你对我有什么想法或建议吗?谢谢

最佳答案

如果某个字段被屏蔽,则在检查警报日期时不会进行比较。因此,当您屏蔽 SECONDS 时,只会比较 DAY、HOUR 和 MINUTE 字段。使用 RTC 实现 1 秒中断的正确方法是使用所有警报掩码,因为这样不会比较任何字段,并且当 RTC 增加 SECOND 字段时,将生成警报中断。

sAlarm.AlarmMask = RTC_ALARMMASK_ALL;

ST 在他们的Using the hardware real-time clock (RTC) in STM32 F0, F2, F3, F4 and L1 series of MCUs 中也描述了所有这些。应用说明。

enter image description here

这是一个非常方便的解决方案,因为您不必在所有中断后重置警报。

关于microcontroller - STM32L151 RTC闹钟中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39345550/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com