embedded
runtime_error
ai_generated
true
RTC: alarm interrupt not triggering at configured time
ID: embedded/rtc-alarm-interrupt-not-triggering
85%Fix Rate
85%Confidence
1Evidence
2024-02-15First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| STM32Cube_FW_H7 V1.11.0 | active | — | — | — |
| FreeRTOS V10.4.1 | active | — | — | — |
Root Cause
RTC alarm interrupt failed to fire due to incorrect mask configuration or pending interrupt flag not cleared.
generic中文
RTC 闹钟中断因掩码配置错误或未清除挂起中断标志而未触发。
Official Documentation
https://www.st.com/resource/en/reference_manual/dm00314099.pdfWorkarounds
-
90% success Check and clear RTC_ISR_ALRAF flag in RTC_ISR register before setting alarm, then enable alarm interrupt in RTC_CR: `RTC->CR |= RTC_CR_ALRAIE;`
Check and clear RTC_ISR_ALRAF flag in RTC_ISR register before setting alarm, then enable alarm interrupt in RTC_CR: `RTC->CR |= RTC_CR_ALRAIE;`
-
85% success Ensure RTC alarm mask bits (ALRAE, ALRABIN) in RTC_CR are set correctly for desired alarm mode.
Ensure RTC alarm mask bits (ALRAE, ALRABIN) in RTC_CR are set correctly for desired alarm mode.
-
95% success Use HAL_RTC_AlarmIRQHandler() which automatically clears pending flags and re-enables interrupt.
Use HAL_RTC_AlarmIRQHandler() which automatically clears pending flags and re-enables interrupt.
中文步骤
在设置闹钟前检查并清除 RTC_ISR 中的 RTC_ISR_ALRAF 标志,然后在 RTC_CR 中使能闹钟中断:`RTC->CR |= RTC_CR_ALRAIE;`
确保 RTC_CR 中的闹钟掩码位(ALRAE、ALRABIN)正确配置为所需闹钟模式。
使用 HAL_RTC_AlarmIRQHandler() 函数,它会自动清除挂起标志并重新使能中断。
Dead Ends
Common approaches that don't work:
-
90% fail
Increasing RTC clock prescaler changes alarm timing but does not fix interrupt configuration.
-
80% fail
Reinitializing RTC peripheral resets all registers, losing alarm settings.
-
70% fail
Adding delay loops after alarm set does not address missing interrupt enable.