STM32 F302自定义板RTC电池供电仅工作10分钟后停止问题求助
STM32 F302自定义板RTC电池供电仅维持10分钟后重置的排查方案
问题背景
基于STM32 F302设计的自定义开发板,需实现电池供电的RTC功能。当前遇到核心问题:主电源关闭后,电池仅能维持RTC运行约10分钟,之后RTC计时器会重置。
当前配置细节:
- RTC初始化函数中已注释自动设置时间与日期的代码
- 采用内置LSI RC振荡器作为RTC时钟源
- 已尝试切换至外部石英振荡器,问题未解决
- 已执行备份电源(电池)初始化操作
附RTC初始化代码:
void RTC_Init(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); PWR_BackupAccessCmd(ENABLE); // 注释自动设置时间日期逻辑 // RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure); // RTC_SetDate(RTC_Format_BIN, &RTC_DateStructure); // 初始化LSI时钟 if (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) { RCC_LSICmd(ENABLE); while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET); } RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); RCC_RTCCLKCmd(ENABLE); RTC_WaitForSynchro(); RTC_WaitForLastTask(); }
硬件层面排查方向
- VBAT回路漏电流检测:用万用表串联在VBAT电池与芯片VBAT引脚之间,测量主电源断电后的静态电流。STM32 F302在VBAT供电+LSI时钟下的典型电流应为1~2μA,若实测电流远高于此值,需排查:
- 备份区域GPIO是否被误配置为推挽输出模式
- VBAT线路上的滤波电容、电池座是否存在漏电
- VBAT连接可靠性:检查VBAT引脚焊接是否牢固,电池座接触是否良好,确认使用的电池容量达标(如CR2032级别的纽扣电池,避免低容量型号)
- 外部元器件干扰:暂时移除VBAT回路的外接非必要元器件(如额外的保护电路),单独测试芯片VBAT供电能力,排除外部电路影响
软件层面排查方向
- 备份寄存器数据校验:主电源断电前,往备份寄存器(BKP_DR1~BKP_DR10)写入固定值,上电后读取该值。若值丢失,说明VBAT供电曾中断(硬件问题);若值保留但RTC重置,说明初始化逻辑存在误触发
- RTC初始化逻辑检查:排查代码中是否存在每次上电都强制重置RTC的逻辑(如误调用
RTC_DeInit()),确保仅在首次上电或备份区域无有效数据时才初始化RTC - LSI稳定性验证:主电源断电前设置RTC闹钟中断(如1分钟后触发),测试电池供电下是否能正常触发,以此判断LSI是否持续运行;同时确认LSI启动等待逻辑正确,避免未稳定就开启RTC
- 低功耗模式配置:检查主电源断电前是否关闭了所有非必要外设时钟,是否配置了正确的待机/停止模式,避免其他外设消耗VBAT电流
额外验证点
- 检查芯片备份区域是否被意外擦除,排查是否存在触发备份区域复位的代码逻辑
- 若使用外部石英振荡器,确认晶振负载电容匹配、焊接无虚焊,且晶振本身质量达标
内容的提问来源于stack exchange,提问作者friendly neighbor
相关产品推荐
相关产品推荐

