STM32
直播中

李华

7年用户 1376经验值
私信 关注
[问答]

STM32L431出现LSE CSS后RTC的ALARM无法进入中断是怎么回事啊?

STM32L431的RTC配置使用LSE时钟,配置ALARMA中断,可以正常进入中断,但是出现LSE CSS后重新配置RTC使用LSI做为系统时钟,但配置后RTC的ALARMA无法进入中断,这是怎么回事啊?

回帖(2)

贾小龙

2024-4-8 10:35:26
估计是LSI时钟未开启导致。
举报

李慧

2024-4-8 17:26:13
可能的原因是在切换时钟源后,需要重新配置RTC的时钟源选择和配置RTC预分频器等参数。请确保在切换时钟源后,重新配置RTC相关的寄存器。

在切换到LSI时钟后,可以按照以下步骤进行配置RTC:
1. 禁用RTC时钟。
   RCC_APB1ENR1_RTCAPBEN = 0;

2. 等待RTC寄存器同步。
   while (RTC->ISR & RTC_ISR_SYNC_FLAG == 0);
   
3. 进入RTC配置模式。
   RTC->CR &= ~RTC_CR_WUTE;
   RTC->ISR &= ~RTC_ISR_WUTWF;
   RTC->ISR |= RTC_ISR_INIT;
   while (!(RTC->ISR & RTC_ISR_INITF));

4. 配置RTC时钟源和预分频器。
   RTC->CR &= ~RTC_CR_WUCKSEL;
   RTC->CR |= RTC_CR_WUCKSEL_2;  //选择LSI作为RTC时钟源
   RTC->CR &= ~RTC_CR_WUCKSEL_2;  //清除WUT的计数值
   RTC->PRER = ((LSI_VALUE / 100) - 1) << 16; //配置预分频器
   
5. 退出RTC配置模式。
   RTC->ISR &= ~RTC_ISR_INIT;

6. 使能RTC时钟。
   RCC_APB1ENR1_RTCAPBEN = 1;

7. 配置RTC的ALARMA中断。
   RTC->CR |= RTC_CR_ALRAIE;
   NVIC_SetPriority(RTC_Alarm_IRQn, 0);
   NVIC_EnableIRQ(RTC_Alarm_IRQn);

请注意,以上代码只是示例,具体的配置可能根据您的应用场景和需求略有不同。另外,还需要检查相关的中断向量表和中断处理函数是否正确设置。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分