STM32 锂电池 RTC
STM32 锂电池 RTC
好的,我们来详细聊聊 STM32 微控制器中 RTC(实时时钟) 使用 锂电池(通常是 CR2032 纽扣电池) 作为后备电源的关键知识。
核心目的: 在主电源(VDD)断开时,由锂电池通过 VBAT 引脚为 RTC 模块以及备份寄存器供电,确保 RTC 持续计时,并且备份寄存器中的数据不会丢失。
关键组成部分与工作原理
-
VBAT 引脚:
- 这是 STM32 芯片上专门用于连接后备电池的引脚。
- 当主电源 VDD 存在时,芯片内部逻辑会自动将 RTC 和备份域的电源切换到 VDD。
- 当 VDD 掉电或低于某个阈值时,芯片会自动无缝切换到
VBAT引脚提供的电源,维持 RTC 和备份寄存器的运行和数据。
-
锂电池(CR2032):
- 电压: 标称电压 3.0V,满电时约 3.3V,放电截止电压通常为 2.0V。
- 容量: 典型容量 200-240mAh,能提供长时间(数月甚至数年)的低功耗后备供电。
- 选择依据: STM32 的
VBAT引脚工作电压范围通常是 1.65V 到 3.6V。CR2032 的电压范围完全符合要求,且其自放电率低,非常适合做后备电源。
-
RTC 模块:
- 一个独立的计时器,使用 32.768kHz 的低速外部晶振作为时钟源(精度高,功耗低)。
- 即使在低功耗模式下(如 Stop, Standby),只要
VBAT有电,RTC 就能持续运行。 - 提供日历(年、月、日、星期、时、分、秒)和闹钟功能。
-
备份寄存器:
- 一小块特殊的 SRAM 区域(通常 20 个 16 位寄存器)。
- 与 RTC 共享
VBAT电源域。当VBAT供电时,这些寄存器内容不会丢失。 - 常用于存储需要在系统复位或掉电重启后保留的关键数据(如配置参数、状态标志、校准值等)。
硬件设计要点
-
连接方式 (最常见和推荐):
+3V (主电源) -----|>|-----.-----> VDD (STM32) 肖特基二极管 | | VBAT (STM32) <----------+-----> 锂电池+ (CR2032+) | GND (STM32) <-----------+-----> 锂电池- (CR2032-) & GND- 二极管: 使用肖特基二极管(如 1N5817, BAT54S),因其正向压降非常低(约 0.3V)。这能确保锂电池电压尽可能多地供给
VBAT,延长电池寿命。普通硅二极管压降(0.6-0.7V)过大,可能导致锂电池电压低于VBAT最低要求时过早失效。 - 作用:
- 当主电源存在时,二极管导通,主电源通过二极管给
VBAT域供电,同时阻止主电源电流流向锂电池,避免不必要的电池消耗。 - 当主电源掉电时,二极管截止,锂电池无缝接管
VBAT域的供电。
- 当主电源存在时,二极管导通,主电源通过二极管给
- 注意: 如果主电源是 3.3V,经过肖特基二极管后约为 3.0V,仍在
VBAT工作范围内。绝对不要将高于 3.6V 的电源(如 5V)直接或通过普通二极管连接到 VBAT,会损坏芯片! 如果主电源是 5V,必须使用电阻分压或 LDO 降压到 3.3V 后再接二极管。
- 二极管: 使用肖特基二极管(如 1N5817, BAT54S),因其正向压降非常低(约 0.3V)。这能确保锂电池电压尽可能多地供给
-
**可选:超级电容
- 对于需要频繁充放电或对成本敏感的应用,可以用小容量超级电容(如 0.1F-1F)代替锂电池。
- 优点:可充电,寿命长(充放电次数多)。
- 缺点:自放电率比锂电池高,需要额外的充电管理电路(限流电阻),断电保持时间相对较短(几小时到几天)。
- 连接方式类似,但通常需要在
VBAT和 GND 之间并联一个电阻(如 100K-1MΩ)为超级电容提供放电路径,防止其电压过高。
-
旁路电容:
- 在
VBAT引脚靠近芯片处放置一个 100nF 的陶瓷电容到 GND,用于电源滤波,提高稳定性。
- 在
-
外部低速晶振:
- RTC 需要精确计时,强烈推荐使用外部 32.768kHz 晶振(Xtal)和两个负载电容(通常 6-12pF,具体值参考晶振规格书和 STM32 数据手册)。内部低速 RC 振荡器精度差,不适合做实时时钟。
软件配置要点 (以 HAL 库为例)
-
启用时钟和访问备份域:
// 1. 使能 PWR 时钟 __HAL_RCC_PWR_CLK_ENABLE(); // 2. 使能对备份域的访问 (解除备份域写保护) HAL_PWR_EnableBkUpAccess();- 这是操作 RTC 和备份寄存器的前提!必须在任何 RTC 初始化或备份寄存器读写之前执行。
-
初始化 RTC:
RTC_HandleTypeDef hrtc; hrtc.Instance = RTC; // RTC 实例 hrtc.Init.HourFormat = RTC_HOURFORMAT_24; // 24小时制 hrtc.Init.AsynchPrediv = 0x7F; // 异步分频值 (127) hrtc.Init.SynchPrediv = 0xFF; // 同步分频值 (255) hrtc.Init.OutPut = RTC_OUTPUT_DISABLE; // 输出禁用 hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; // 初始化 RTC if (HAL_RTC_Init(&hrtc) != HAL_OK) { // 初始化错误处理 }AsynchPrediv和SynchPrediv用于将 32.768kHz 时钟分频得到 1Hz 的秒信号。计算:(AsynchPrediv + 1) * (SynchPrediv + 1) = 32768。示例(127+1)*(255+1)=128*256=32768。
-
配置 RTC 时钟源:
- 通常在
HAL_RTC_MspInit函数中实现:void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc) { if(hrtc->Instance == RTC) { // 1. 使能 LSE 时钟 (32.768kHz 晶振) __HAL_RCC_RTC_CONFIG(RCC_RTCCLKSOURCE_LSE); // 选择 LSE 作为 RTC 时钟源 __HAL_RCC_LSE_CONFIG(RCC_LSE_ON); // 开启 LSE // 等待 LSE 稳定 while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) {} // 2. 使能 RTC 时钟 __HAL_RCC_RTC_ENABLE(); } } - 务必选择
RCC_RTCCLKSOURCE_LSE以获得最佳精度。LSI(内部低速 RC)精度差,HSE分频功耗高。
- 通常在
-
设置时间和日期:
RTC_TimeTypeDef sTime = {0}; RTC_DateTypeDef sDate = {0}; // 设置时间 (例如 14:30:00) sTime.Hours = 14; sTime.Minutes = 30; sTime.Seconds = 0; sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE; sTime.StoreOperation = RTC_STOREOPERATION_RESET; HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN); // 设置日期 (例如 2023年10月27日, 星期五) sDate.WeekDay = RTC_WEEKDAY_FRIDAY; sDate.Month = RTC_MONTH_OCTOBER; sDate.Date = 27; sDate.Year = 23; // 2023 年的后两位 HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN); -
读取时间和日期:
RTC_TimeTypeDef gTime; RTC_DateTypeDef gDate; HAL_RTC_GetTime(&hrtc, &gTime, RTC_FORMAT_BIN); HAL_RTC_GetDate(&hrtc, &gDate, RTC_FORMAT_BIN); // 使用 gTime.Hours, gTime.Minutes, gTime.Seconds, gDate.WeekDay, gDate.Month, gDate.Date, gDate.Year -
使用备份寄存器:
// 写入备份寄存器 (例如 DR1) HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR1, 0x1234); // 读取备份寄存器 uint16_t backup_value = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR1);- 记得在操作备份寄存器前,必须已经执行了
HAL_PWR_EnableBkUpAccess()。
- 记得在操作备份寄存器前,必须已经执行了
常见问题与调试
-
RTC 不工作/时间不准:
- 检查硬件:
VBAT锂电池电压是否正常(>2.0V)?连接是否可靠?- 32.768kHz 晶振是否起振?用示波器测量(注意高阻抗探头可能影响起振)。检查负载电容值是否正确焊接。
- 二极管方向是否正确?压降是否过大?
- 检查软件:
- 是否在初始化 RTC 前正确执行了
__HAL_RCC_PWR_CLK_ENABLE()和HAL_PWR_EnableBkUpAccess()? - 是否成功配置并选择了 LSE` 作为时钟源?是否等待 LSE 就绪?
- 分频系数
AsynchPrediv和SynchPrediv计算是否正确? - 是否在主循环中定期同步/读取时间?RTC 是独立运行的,但读取操作需要软件发起。
- 是否在初始化 RTC 前正确执行了
- 检查硬件:
-
断电后时间丢失:
VBAT引脚未连接电池或电池耗尽。VBAT电路设计错误(如二极管方向反了,主电源掉电时无法切换到电池)。- 电池电压低于
VBAT最低工作电压(检查电池电量,检查二极管压降是否导致有效电压过低)。 - 硬件连接不可靠(虚焊、断线)。
-
备份寄存器数据丢失:
- 原因同上(
VBAT供电问题)。 - 在写入备份寄存器后,没有正确退出备份域访问(虽然
HAL_PWR_EnableBkUpAccess()使能后默认一直可访问,但某些安全操作可能需要临时禁用)。
- 原因同上(
-
功耗过高导致电池消耗过快:
- 检查是否有其他电路意外连接到
VBAT域。 - 确保在低功耗模式下(Stop/Standby),所有不必要的外设时钟都已关闭。
- 检查 PCB 是否有漏电。
- 检查是否有其他电路意外连接到
总结
在 STM32 上使用锂电池为 RTC 供电,核心在于:
- 正确设计
VBAT电路: 使用肖特基二极管隔离主电源和锂电池。 - 选择合适电池: CR2032 是最常用且合适的选择。
- 使用外部 32.768kHz 晶振: 保证计时精度。
- 软件关键步骤: 使能 PWR 时钟 -> 使能备份域访问 -> 配置 RTC 时钟源(LSE)-> 初始化 RTC -> 设置/读取时间日期/备份寄存器。
- 注意调试: 重点检查
VBAT电压、晶振起振、备份域访问使能。
遵循这些原则,就能可靠地在 STM32 应用中实现掉电保持的实时时钟功能。
锂电池充电电路图如何设计三节锂电池充电管理芯片电路图解析
关于三节锂电池供电的产品,在三节锂电池上,需要三个电路系统:1,三节锂电池保护电路,2,三节
资料下载
生龙活虎3
2021-03-17 21:28:20
锂电池回收 锂电池模组回收 软包锂电池回收 圆柱锂电池回收 动力锂电池回收,回收电池,
:***彭'SQQ QQ752127311回收电芯,回收库存电芯,回收聚合物电芯,回收锂电芯,回收动力电芯,三元电芯回收电池,回收动力电池,回收
锂电池的基本知识
随着物联网的发展,单片机+锂电池,这种组合越来越普遍,单片机厂商也不断推出适合物联网的单片机。先补充一下锂电池的基本知识…锂电池在充满电的时候,
钴锂电池回收,钴动力电池模组回收,钴回收三元动力电池,回收锂电池,库存锂电池回收 库存退役锂电池回收
:***彭'SQQ QQ752127311回收电芯,回收库存电芯,回收聚合物电芯,回收锂电芯,回收动力电芯,三元电芯回收电池,回收动力电池,回收
回收电池,回收动力电池,回收动力锂电池,回收三元动力电池,回收锂电池 锂电池回收 锂电池模组回收
我们将为贵司提供热情周到的,咨询、报价! 电话:***彭'SQQ QQ752127311回收电芯,回收库存电芯,回收聚合物电芯,回收锂电芯,回收动力电芯,三元电芯回收电池,回收动力
回收电芯,回收库存电芯,回收电池,回收动力电池,锂电池回收 锂电池模组回,收库存锂电池回收
:***彭'SQQ QQ752127311回收电芯,回收库存电芯,回收聚合物电芯,回收锂电芯,回收动力电芯,三元电芯回收电池,回收动力电池,回收
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 如何进行编码器的正确接线?接线方法介绍
- 什么是场效应管?它的作用是什么?
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- amoled屏幕和oled区别
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 苹果笔记本macbookpro18款与19款区别
- 通讯隔离作用
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机