可能的原因是在切换时钟源后,需要重新配置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);
请注意,以上代码只是示例,具体的配置可能根据您的应用场景和需求略有不同。另外,还需要检查相关的中断向量表和中断处理函数是否正确设置。
可能的原因是在切换时钟源后,需要重新配置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);
请注意,以上代码只是示例,具体的配置可能根据您的应用场景和需求略有不同。另外,还需要检查相关的中断向量表和中断处理函数是否正确设置。
举报