[其他] RTC 初始化与时钟源配置

[复制链接]
 楼主| 大鹏2365 发表于 2025-5-31 20:51 | 显示全部楼层 |阅读模式
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;                          // 恢复写保护

磨砂 发表于 2025-8-2 09:27 | 显示全部楼层
通过[size=0.875]RCC_APB1PeriphClockCmd()函数启用电源控制模块和备份接口的时钟
晓伍 发表于 2025-8-4 13:28 | 显示全部楼层
通常使用备份寄存器存储一个特定值,判断是否已完成初次配置
八层楼 发表于 2025-8-4 15:58 | 显示全部楼层
推荐使用精度更高的LSE,因其在主电源断电时仍可由VBAT引脚供电维持运行
观海 发表于 2025-8-4 18:36 | 显示全部楼层
调用[size=0.875]RTC_WaitForSynchro()确保APB1接口与RTC核心时钟同步,避免读取错误数据
guanjiaer 发表于 2025-8-4 20:59 | 显示全部楼层
修改关键寄存器前需置位[size=0.875]RTC_CRL[size=0.875]CNF位进入配置模式,操作完成后清除该位以锁定设置
heimaojingzhang 发表于 2025-8-5 08:44 | 显示全部楼层
将人类可读的时间转换为Unix时间戳或直接填充结构体,再通过[size=0.875]mktime()函数计算总秒数
keaibukelian 发表于 2025-8-5 11:08 | 显示全部楼层
外部低速晶振典型频率为32.768kHz,精度高且稳定;独立于主系统时钟,即使主电源关闭仍可运行

paotangsan 发表于 2025-8-5 13:31 | 显示全部楼层
内部低速振荡器约32kHz的RC振荡器,成本较低但精度较差;受电压波动影响较大,不适合对精度要求高的场景

renzheshengui 发表于 2025-8-5 16:06 | 显示全部楼层
内部低速振荡器无需外接元件,适用于临时备份或低成本方案

wowu 发表于 2025-8-5 18:31 | 显示全部楼层
HSE分频时钟进行128分频后作为RTC来源

您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

692

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部