STM32之RTC(实时时钟)代码讲解

本文深入解析STM32的实时时钟(RTC)模块,介绍其工作原理及如何通过编程实现精确的时间和日期设置。探讨RTC的计数器、预分频器和中断配置,以及如何利用RTC中断实现时间计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

          STM32 的实时时钟(RTC)是一个独立的定时器。STM32 的 RTC 模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。
        RTC 模块和时钟配置系统(RCC_BDCR 寄存器)是在后备区域,即在系统复位或从待机模式唤醒后 RTC 的设置和时间维持不变。但是在系统复位后,会自动禁止访问后备寄存器和 RTC,以防止对后备区域(BKP)的意外写操作。所以在要设置时间之前, 先要取消备份区域(BKP)写保护

RTC 的简化框图:

       RTC 由两个主要部分组成(见上图),第一部分(APB1 接口)用来和 APB1 总线相连。此单元还包含一组 16 位寄存器,可通过 APB1 总线对其进行读写操作。APB1 接口由 APB1 总线时钟驱动,用来与 APB1 总线连接。另一部分(RTC 核心)由一组可编程计数器组成,分成两个主要模块。第一个模块是 RTC 的预分频模块,它可编程产生 1 秒的 RTC 时间基准 TR_CLK。RTC 的预分频模块包含了一个 20位的可编程分频器(RTC 预分频器)。如果在 RTC_CR 寄存器中设置了相应的允许位,则在每个TR_CLK 周期中 RTC 产生一个中断(秒中断)。第二个模块是一个 32 位的可编程计数器RTC_CNT),可被初始化为当前的系统时间,一个 32 位的时钟计数器,按秒钟计算,可以记录 4294967296 秒,约合 136 年左右,作为一般应用,这已经是足够了的。RTC 还有一个闹钟寄存器 RTC_ALR,用于产生闹钟。系统时间按 TR_CLK 周期累加并与

         136年的计算,取32位的最大值:

          ffffffff(十六进制) /   3600 (十进制,一小时的秒数)  /     24 (一天24小时)   /     365 (一年按照365天计算)   =  136 年

         ffffffff(十六进制)   =    4294967295(十进制)

    

回归到本次文章的重点吧,代码讲解,寄存器部分,各位自己去了解吧,开始使用的时候,其实可以直接套模板用着先,有时间了自己在深入了解寄存器就行(只讲初始化部分,代码是原子的):

下面的代码是RTC时钟的初始化部分,以及中断部分:

我想讲解的是,如何去实现时间计算部分,在下面:

//RTC时钟中断
//每秒触发一次  	 
void RTC_IRQHandle
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值