stm32f4 rtc 电池
时间: 2025-05-31 10:43:21 浏览: 29
### STM32F4 RTC电池备份电源使用方法
STM32F4系列微控制器提供了丰富的电源管理和低功耗特性,其中包括RTC(实时时钟)模块的电池备份功能。该功能允许设备在主电源断开的情况下仍然保持时间计数以及存储关键数据。
#### 1. 备份域概述
STM32F4 的备份域包括 LSE 振荡器、RTC、备份寄存器和备份 SRAM (BKP SRAM) 等组件[^2]。这些组件可以在主电源 VDD 断电时通过 VBAT 引脚供电,从而实现长时间的数据保存和时间记录功能。为了启用此功能,需确保 VBAT 连接至稳定的备用电源,通常是一个纽扣电池[^4]。
#### 2. 配置步骤
以下是配置 STM32F4 RTC 使用电池备份电源的主要过程:
##### 启用备份域访问权限
在默认情况下,备份域受到写保护以防止意外修改。因此,在操作之前需要解除写保护:
```c
// 解除备份域写保护
PWR->CR |= PWR_CR_DBP;
while (!(PWR->CSR & PWR_CSR_DBPW)); // 等待写保护解锁完成
```
##### 初始化 RTC 和 LSE
如果计划使用 LSE(低速外部晶振)作为 RTC 的时钟源,则需要先初始化 LSE 并将其分配给 RTC:
```c
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
// 开启 LSE 振荡器
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
// 将 LSE 设置为 RTC 时钟源
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
```
##### 配置 RTC 功能
接下来可以初始化 RTC 模块并设置初始时间和日期:
```c
RTC_TimeTypeDef sTime = {0};
RTC_DateTypeDef sDate = {0};
// 设置当前时间
sTime.Hours = 12;
sTime.Minutes = 30;
sTime.Seconds = 0;
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK) {
Error_Handler();
}
// 设置当前日期
sDate.WeekDay = RTC_WEEKDAY_MONDAY;
sDate.Month = RTC_MONTH_JANUARY;
sDate.Date = 1;
sDate.Year = 23; // 假设年份为 2023
if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK) {
Error_Handler();
}
```
##### 切换到 VBAT 供电
当主电源 VDD 关闭时,VBAT 将自动接管对备份域的供电。这种切换由硬件级别的掉电复位机制控制,无需额外软件干预[^3]。
#### 3. 注意事项
- **VBAT 接线**:如果没有外部电池可用,应将 VBAT 引脚连接到 VDD 上,但这仅适用于短时间测试场景。长期运行建议采用独立的备用电源。
- **低功耗模式支持**:进入 STOP 或 STANDBY 模式前,请确认已正确配置 RTC 和相关资源以便维持正常运作[^1]。
- **校准误差调整**:对于高精度应用场景,可能还需要考虑补偿因温度变化引起的晶体频率漂移问题。
---
阅读全文
相关推荐




















