资讯动态

STM32入门教程:BKP备份寄存器 RTC实时时钟详解

发布时间:2026/8/12 17:36:19 来源:尧图企业网站定制
我的STM32学习专栏[点击直达 | 持续更新中]适用平台STM32F103C8T6开发环境Keil5 标准库函数前言做项目的时候你有没有遇到过这种需求单片机断电重启后想要记住上一次设置的某个参数比如密码、校准值、或者一个计数器的值用Flash存当然可以但Flash有擦写次数限制而且操作麻烦。这时候BKP备份寄存器就派上用场了。再说另一个场景你想做一个电子时钟要求断电后时间还能继续走下次上电显示的是当前真实时间而不是从0开始。这时候就需要RTC实时时钟。BKP和RTC这两个模块在STM32里是绑在一起的它们都工作在后备区域都有独立的电池供电。这篇文章我就结合江科大的课程笔记把这两个东西从原理到应用彻底讲清楚。一、BKP备份寄存器1.1 BKP是什么BKPBackup Registers就是备份寄存器说白了它就是单片机里一小块特殊的RAM用来存用户数据。但它和普通RAM最大的区别是掉电不丢失。特性说明供电方式VDD2.0~3.6V正常供电VDD掉电后自动切换为VBAT1.8~3.6V电池供电抗复位能力系统复位、电源复位、待机唤醒后数据不清零数据清除条件只有TAMPER引脚检测到侵入事件或软件手动清除才会清空存储容量中/小容量20字节10个16位寄存器 DR1~DR10大容量/互联型84字节DR1~DR42附加功能RTC时钟校准、闹钟脉冲/秒脉冲输出我的理解你可以把BKP想象成单片机的记事本小纸条。主电源断了它靠纽扣电池续命你按复位键重启了它上面的字还在。只有你把TAMPER引脚PC13接到一个检测电路上有人拆机打开外壳触发了侵入检测它才会销毁证据把数据清空。这个设计在安防领域很有用。1.2 BKP的基本结构BKP基本结构框图从框图里可以清楚地看到BKP的三大外部接口VBAT电池供电入口接3V纽扣电池CR2032TAMPER侵入检测引脚对应PC13。当这个引脚检测到有效边沿时所有备份寄存器内容被硬件自动清除RTC可以输出RTC校准时钟、闹钟脉冲或秒脉冲内部核心是数据寄存器DR每个DR都是16位的。中容量芯片有DR1~DR10共10个能存20个字节。对于STM32F103C8T6这种中容量芯片来说20个字节存个密码、存个设备ID、存几个标志位完全够用了。二、RTC实时时钟2.1 RTC是什么RTCReal Time Clock实时时钟就是一个独立的定时器专门用来给系统提供时间和日历功能。RTC的几个关键特性独立工作RTC和它的时钟配置寄存器都在后备区域有自己独立的时钟源掉电保持VDD(2.0~3.6V)断电后VBAT1.8~3.6V继续给RTC供电时钟继续走32位计数器RTC_CNT是一个32位可编程计数器可以把它当成Unix时间戳的秒计数器来用20位预分频器RTC_PRL是预分频重装寄存器可以把不同频率的输入时钟分频成1Hz闹钟功能RTC_ALR是32位闹钟值当CNT ALR时产生闹钟中断我的理解RTC本质上就是一个超级定时器。普通定时器TIM主电源断了就停了RTC有备用电池这个外挂所以能一直跑。32位计数器最大能计到0xFFFFFFFF换算成秒大约是136年所以你根本不用担心它溢出。预分频器的作用就是把32.768KHz这种高频时钟分频成1Hz每秒一个脉冲这样CNT每加1就代表过了1秒。2.2 RTC的三种时钟源RTC的时钟源可以选择三种时钟源频率特点适用场景HSE/1288MHz/128 62.5KHz精度高但主电源断了HSE就停了不推荐用于RTCLSE32.768KHz外部晶振精度高有独立供电频率正好是2^15强烈推荐LSI约40KHz内部RC不用外接晶振但温漂大精度差对时间精度要求不高的场景重点说一下LSE32.768KHz这个频率选得特别巧妙因为32768 2^15。RTC的20位预分频器设置重装值为32768-1 32767时正好分频得到1Hz。而且外部低速晶振如下图的圆柱形银色晶振频率稳定温漂小是做时钟的最佳选择。2.3 RTC框图与基本结构简化的RTC框图RTC基本结构把这两张图结合起来看RTC的工作流程就很清晰了第一步时钟源选择HSE/128、LSE、LSI 三选一经过多路选择器输出RTCCLK。第二步预分频RTCCLK 进入预分频器RTC_PRL 存放分频重装值RTC_DIV 是余数寄存器当前分频计数。当DIV减到0时输出一个TR_CLK通常是1Hz。第三步32位计数器计数TR_CLK 的每个上升沿让 RTC_CNT 加1。CNT就是当前的秒计数器。第四步中断与闹钟秒中断每个TR_CLK周期产生一次每秒一次溢出中断CNT从0xFFFFFFFF回到0时产生闹钟中断当 CNT ALR 时产生同时可以唤醒待机模式第五步NVIC中断管理三种中断信号经过RTC_CR控制寄存器中的中断使能位SECIE、OWIE、ALRIE最终汇总到NVIC。注意框图中的两个小字待机时不供电 和 待机时维持供电。APB1接口和NVIC在主电源断电后是不工作的但预分频器、计数器、闹钟值这些核心模块由VBAT维持供电所以时间不会停。我的理解RTC的设计非常像沙漏。预分频器就是那个控制沙流速率的阀门把32.768KHz变成1HzCNT就是下面接沙子的容器每秒钟多一粒沙。ALR闹钟就是你设定的目标重量到了就响铃。而APB1总线只是你看沙漏的窗口你断电了窗口黑了但沙子还在流。三、硬件电路3.1 备用电池供电硬件电路连接看左边的备用电池供电部分简单连接VBAT直接接3V电池正极电池负极接地。这种接法有个问题主电源3.3V和电池同时存在时可能会有电流倒灌。推荐连接通过二极管D1、D2做或门供电。VDD3.3V经过D2降压后到VBAT电池B2经过D1到VBAT。谁电压高谁供电。C3是滤波电容。这样主电源有电时电池不耗电主电源断了电池无缝接管。3.2 外部低速晶振电路晶振X132.768KHz跨接在PC14OSC32_IN和PC15OSC32_OUT之间两个引脚各接一个10pF的负载电容到地。这是标准的皮尔斯振荡电路。我的理解VBAT这个设计真的很妙。你想想看如果没有VBAT每次断电重启时间都要重新设置那电子时钟就没法用了。纽扣电池一般能用好几年因为RTC功耗极低微安级。我建议大家做项目时一定用推荐连接的二极管方案不要直接把电池焊在VBAT上否则电池寿命会大打折扣。四、RTC操作注意事项重点4.1 使能访问权限第一步必须做要对BKP和RTC进行任何操作必须先完成以下两步开启PWR和BKP的时钟这两个外设都挂在APB1总线上使用前必须先开时钟否则寄存器写不进去。设置PWR_CR的DBP位DBPDisable Backup Domain Write Protection默认是0后备区域被锁死置1后才能访问RTC和BKP寄存器。为什么需要这两步因为后备区域是敏感地带为了防止程序跑飞时误改写RTC和BKPSTM32默认把它们锁起来了。你必须先开时钟再设置DBP位才能解锁。4.2 等待寄存器同步如果APB1接口之前被禁用过在读取RTC寄存器前必须等待RSF位Register Synchronized Flag被硬件置1。由于RTC时钟32.768KHz和APB1时钟36MHz是异步的APB1读RTC寄存器时需要等待同步否则读到的可能是旧数据。4.3 进入配置模式必须设置RTC_CRL寄存器中的CNF位Configuration Flag使RTC进入配置模式后才能写入RTC_PRL、RTC_CNT、RTC_ALR这三个核心寄存器。这是硬件层面的保护机制。CNF1时RTC核心暂停计数允许修改配置CNF0时RTC正常运行。4.4 等待写操作完成对RTC任何寄存器的写操作都必须在前一次写操作结束后进行。可以通过查询RTC_CRL寄存器中的RTOFF位RTC Operation OFF来判断RTC寄存器是否处于更新中。仅当RTOFF状态位是1时才可以写入RTC寄存器。因为RTC时钟很慢32.768KHz而APB1时钟很快36MHz写RTC寄存器需要好几个RTC时钟周期才能真正生效。如果连续快速写入后面的数据会覆盖前面的导致配置错误。风险说明这四步如果漏了任何一步RTC要么初始化失败要么时间不准要么写不进去。特别是解除写保护DBP和等待RTOFF是很多新手最容易踩的坑。五、总结表格项目BKP备份寄存器RTC实时时钟全称Backup RegistersReal Time Clock本质16位数据寄存器组DR1~DRn32位秒计数器 20位预分频器供电区域后备区域VBAT维持后备区域VBAT维持掉电保持✅ 数据不丢失✅ 时钟继续走系统复位保持✅ 不清零✅ 不清零容量/范围20字节中容量/ 84字节大容量CNT可计136年时钟源无纯寄存器HSE/128、LSE32.768KHz、LSI40KHz推荐时钟源-LSE外部低速晶振清除条件TAMPER侵入事件、软件复位仅VBAT断电才停中断类型无秒中断、溢出中断、闹钟中断关键寄存器DRx、CSR、CRPRL、DIV、CNT、ALR、CRL、CRH访问前提开PWR/BKP时钟 DBP1开PWR/BKP时钟 DBP1 CNF1 RTOFF1写这篇文章的时候我把江科大的视频又回顾了一遍对照着《STM32F10xxx参考手册》把RTC的框图重新梳理了一次。说实话RTC这个章节知识点比较杂BKP和RTC的关系、三种时钟源的选择、预分频器的计算、那四个操作注意事项刚开始学的时候很容易搞混。但只要你抓住一条主线——RTC是一个用32.768KHz晶振驱动、经过32768分频得到1Hz、用32位计数器记录秒数的独立定时器——其他的细节就都能串起来了。BKP则是RTC的好邻居共享后备区域和VBAT供电用来存一些掉电不能丢的小数据。开发环境Keil5 STM32F103C8T6最小系统板 ST-Link参考资料江科大STM32入门教程、《STM32F10xxx参考手册》前置文章江科大STM32入门Unix时间戳详解如果本文对你有帮助欢迎点赞 收藏 ⭐ 有任何问题欢迎在评论区交流一起学习进步

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价