当前位置: 首页 > news >正文

STM32 RTC配置

一、什么是RTC?

RTC,即实时时钟,是一种能持续运行并保持当前时间信息的电子装置。它常用于在设备断电的情况下依然能保持准确的年、月、日、时、分、秒信息。

与CPU核心时钟不同,RTC通常采用独立的低频晶振(如32.768kHz)以低功耗运行,即便在系统关机或低功耗模式下,也能维持其运转。


二、RTC的工作原理

1. 低功耗晶振振荡器

大多数RTC模块内部包含一个32.768kHz的晶体振荡器,这个频率被广泛应用的原因是它是2的15次方,方便二进制计数器设计。

2. 计时器/分频器电路

晶振输出的高频脉冲通过分频器被转换为1秒的时间基准。RTC内部通常含有:

  • 秒计数器

  • 分计数器

  • 时计数器

  • 日历模块(用于年/月/日转换,包括闰年处理)

3. 电池备份系统

为保持断电时的计时能力,RTC模块通常配有纽扣电池(如CR2032)或超级电容,确保即便主电源断开,RTC仍能保持运行。


三、RTC的分类

1. 独立RTC芯片

常见芯片如:DS1307、DS3231、PCF8563 等。这类芯片通过I2C或SPI与主控通信,精度高,使用方便。

2. SoC内置RTC

如STM32、ESP32等微控制器内部集成RTC模块,无需额外芯片,但精度和备电能力略逊色于专业RTC芯片。


四、软件配置

1. 启用电源和访问备份域

RTC属于备份域(Backup Domain),必须解锁才能进行操作:

RCC->APB1ENR |= RCC_APB1ENR_PWREN;       // 开启电源接口时钟
PWR->CR |= PWR_CR_DBP;                   // 使能对RTC和备份寄存器的访问

2. 启用LSE外部晶振(32.768kHz)

RCC->BDCR |= RCC_BDCR_LSEON;             // 使能LSE
while (!(RCC->BDCR & RCC_BDCR_LSERDY));  // 等待LSE准备就绪

3. 选择LSE作为RTC时钟源

RCC->BDCR &= ~RCC_BDCR_RTCSEL;           // 清除选择位
RCC->BDCR |= RCC_BDCR_RTCSEL_0;          // 选择LSE作为RTC时钟
RCC->BDCR |= RCC_BDCR_RTCEN;             // 使能RTC

4. 进入初始化模式,设置RTC寄存器

RTC->WPR = 0xCA;                         // 解锁写保护
RTC->WPR = 0x53;

RTC->ISR |= RTC_ISR_INIT;                // 进入初始化模式
while (!(RTC->ISR & RTC_ISR_INITF));     // 等待初始化允许

RTC->PRER = (127 << 16) | 255;           // 设置预分频值:异步127, 同步255(1Hz)

RTC->TR = (0 << 20) | (0 << 16) | (0 << 8) | (0 << 4);  // 设置时间为00:00:00
RTC->DR = (24 << 20) | (4 << 16) | (1 << 13);           // 设置日期:2024年4月1日(BCD格式)

RTC->ISR &= ~RTC_ISR_INIT;               // 退出初始化模式

5. 锁定写保护

RTC->WPR = 0xFF;                         // 重新开启写保护

6. 读取时间和日期

uint32_t tr = RTC->TR;
uint8_t hours = ((tr >> 20) & 0x3) * 10 + ((tr >> 16) & 0xF);
uint8_t minutes = ((tr >> 12) & 0x7) * 10 + ((tr >> 8) & 0xF);
uint8_t seconds = ((tr >> 4) & 0x7) * 10 + (tr & 0xF);

相关文章:

  • JQ6500语音模块详解(STM32)
  • Android 热点开发调试总结
  • locust压力测试
  • LeetCode热题100--560.和为K的子数组(前缀和)--中等
  • ubuntu安装docker,conda,tmux,btop,nvitop
  • ai环境cuda cudnn conda torch整体迁移 wsl docker
  • vue的生命周期 以及钩子
  • 第二章:Agent System
  • 【亚马逊云】AWS Wavelength 从理论讲解到实验演练
  • AWS PrivateLink vs Lattice:深度解析两大网络服务的异同
  • python_股票月数据趋势判断
  • [leetcode]2302.统计得分小于k的子数组
  • java 使用 POI 为 word 文档自动生成书签
  • 学生管理系统审计
  • 【Java ee初阶】多线程(4)
  • 第十一节:性能优化高频题-响应式数据深度监听问题
  • 大模型(LLMs)强化学习—— PPO
  • Android wifi开发调试总结
  • NIPS2021 | 视觉 Transformer 的有趣特性
  • 华纳云:centos如何实现JSP页面的动态加载
  • 保利发展去年净利润约50亿元,在手现金1342亿元
  • 古籍新书·2025年春季|中国土司制度史料集成
  • 四川落马厅官周海琦受审,1000多人接受警示教育
  • “富卫保险冠军赛马日”创双纪录,打造赛马旅游盛宴,印证香港联通国际优势
  • 迟来的忍者与武士:从《刺客信条:影》论多元话语的争议
  • 甘肃省原副省长赵金云被开除公职,甘肃省委表态:坚决拥护党中央决定