RTC 初始化与时钟源配置
RTC 时钟源选择MM32F3273 的 RTC 模块支持两个时钟源:
低速外部晶振:32.768 kHz,精度高,推荐用于时间保持。
低速内部 RC 振荡器:约 32 kHz,低功耗但精度差。
初始化流程示意(以 LSE 为例):
c
复制
编辑
RCC->APB1ENR |= RCC_APB1ENR_PWREN; // 使能电源模块
PWR->CR |= PWR_CR_DBP; // 允许访问 RTC 和备份寄存器
RCC->BDCR |= RCC_BDCR_LSEON; // 启动 LSE
while (!(RCC->BDCR & RCC_BDCR_LSERDY)); // 等待 LSE 稳定
RCC->BDCR |= RCC_BDCR_RTCSEL_LSE; // 选择 LSE 为 RTC 时钟源
RCC->BDCR |= RCC_BDCR_RTCEN; // 使能 RTC
// 初始化 RTC,设置时分秒、日历等
RTC->WPR = 0xCA; RTC->WPR = 0x53; // 解锁写保护
RTC->ISR |= RTC_ISR_INIT; // 进入初始化模式
while (!(RTC->ISR & RTC_ISR_INITF)); // 等待进入 INIT 模式
// 设置预分频器、时间、日期...
RTC->ISR &= ~RTC_ISR_INIT; // 退出初始化
RTC->WPR = 0xFF; // 恢复写保护
通过RCC_APB1PeriphClockCmd()函数启用电源控制模块和备份接口的时钟
通常使用备份寄存器存储一个特定值,判断是否已完成初次配置
推荐使用精度更高的LSE,因其在主电源断电时仍可由VBAT引脚供电维持运行
调用RTC_WaitForSynchro()确保APB1接口与RTC核心时钟同步,避免读取错误数据
修改关键寄存器前需置位RTC_CRL的CNF位进入配置模式,操作完成后清除该位以锁定设置
页:
[1]