stm32 CUBEMX rtc掉电保持计时
时间: 2025-03-05 17:46:52 浏览: 70
### STM32 CubeMX RTC 掉电保持计时配置
#### 配置RTC模块
在STM32CubeMX开发环境中,为了使RTC能够在掉电情况下继续工作并保存当前的时间和日期数据,需要进行如下设置:
- **启动内部低速振荡器 (LSI)** 或者 **连接外部晶体 (LSE)** 来作为RTC的工作时钟源。通常推荐使用更稳定的LSE来提高精度[^1]。
```c
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
// 初始化 LSE 振荡器
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.LSEState = RCC_LSE_ON; // 开启 LSE
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){
Error_Handler();
}
```
- **开启备份区域访问权限**:因为RTC寄存器位于备份域内,在初始化之前必须允许对该区域的操作。
```c
__HAL_RCC_PWR_CLK_ENABLE(); // 启用 PWR 时钟
HAL_PWR_EnableBkUpAccess(); // 允许访问备份区
```
- **激活RTC功能**
通过调用`HAL_RTC_Init()`函数完成RTC硬件资源的分配以及参数设定,确保传入正确的RTC初始化结构体指针。
```c
RTC_HandleTypeDef hrtc;
void MX_RTC_Init(void)
{
__HAL_RCC_RTC_ENABLE();
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 127;
hrtc.Init.SynchPrediv = 255;
if (HAL_RTC_Init(&hrtc) != HAL_OK){
Error_Handler();
}
}
```
#### 设置备用电源模式下的持续供电
为了让RTC能在系统断电期间依然正常运作,还需要确保Vbat引脚接有独立电池或其他形式的能量供应装置给RTC电路提供必要的电力支持。这一步骤并非由软件定义而是依赖于实际硬件设计阶段的选择与安排。
#### 时间片轮询机制实现
对于希望利用时间片轮询方式更新显示或触发某些事件的情况,则可以在主循环里加入对RTC读取操作,并配合延时函数形成周期性的查询过程[^3]。
```c
while(1){
/* 获取当前时间 */
HAL_RTC_GetTime(&hrtc, &sTime, FORMAT_BIN);
/* 显示时间到LCD屏或者其他接口 */
Display_Time(sTime.Hours,sTime.Minutes,sTime.Seconds);
/* 延迟一段时间再重复上述动作 */
HAL_Delay(1000);
}
```
以上即是在STM32中借助CubeMX工具配置RTC以达成掉电保护效果的方法概览及其简单应用实例。
阅读全文
相关推荐


















