ST意法半导体
直播中

王玲

8年用户 1508经验值
私信 关注
[问答]

stm8l051f3 TSSOP20封装,待机模式下,2天后电流突然增加到140UA是为什么?

没有任何外设,烧录,上电后,直接HALT待机,电流正常,在5UA以下,但是2天后,电流突然增加到140UA

回帖(3)

唐奇

2025-3-15 16:46:28
1. 中间有没有电压跌落的情况发送。


2. 没有用到的IO口是否没有配置

3.从电流值上看,包含了PCB的电流,是否有其他地方漏电
举报

陈思远

2025-3-15 16:46:33
不知你唤醒后的功耗是多少。


会不会是唤醒后因为某些中断标志没清零处理而没有再进入低功耗?


还有,是否可能唤醒后再次进入低功耗模式前,某些管脚没处理好? 或者某些外设没及时关闭? 
举报

陈伟

2025-3-21 17:55:41

针对STM8L051F3在HALT模式下两天后电流突增的问题,以下是可能的原因及解决方案:


可能原因分析




  1. RTC定时唤醒配置

    RTC可能设置了周期性的自动唤醒(如每两天一次),唤醒后未重新进入HALT模式,导致MCU保持运行状态,电流升高。




  2. 看门狗复位触发

    独立看门狗(IWDG)或窗口看门狗(WWDG)未被禁用,超时后触发复位,唤醒MCU但未再次进入HALT模式。




  3. 外部中断或GPIO干扰

    未使用的GPIO配置为浮空输入,或外部中断未禁用,两天后因环境干扰触发唤醒。




  4. 低功耗模式配置错误

    进入HALT前未正确关闭外设时钟(如ADC、定时器),或电源管理寄存器设置不当。




  5. 硬件问题

    电容漏电、电源波动等硬件故障,但概率较低。






逐步解决方案




  1. 检查RTC及自动唤醒配置  



    • 确认RTC是否启用了闹钟或周期性唤醒功能(如RTC_CR2.ALRAIERTC_CR1.WUTIE)。  

    • 在RTC唤醒中断服务程序(ISR)中,确保清除中断标志并立即重新进入HALT模式。  

    • 若无需RTC,彻底关闭其时钟(通过CLK_RTCClockConfig(DISABLE))。




  2. 禁用看门狗定时器  



    • 检查代码是否启用了IWDG或WWDG,若未使用,确保以下代码执行:  
      IWDG->KR = 0x00;  // 禁用IWDG
      WWDG->CR &= ~WWDG_CR_WDGA;  // 禁用WWDG




  3. 配置GPIO为低功耗模式  



    • 将所有未使用的GPIO设为模拟输入(最低功耗)或输出低电平:  
      GPIO_Init(GPIOx, GPIO_Pin, GPIO_Mode_Out_PP_Low_Slow); // 输出低电平
      // 或
      GPIO_Init(GPIOx, GPIO_Pin, GPIO_Mode_In_FL_No_IT);     // 浮空输入(不推荐)




  4. 彻底关闭外设时钟  



    • 进入HALT前关闭所有外设时钟(通过CLK_PeripheralClockConfig函数):  
      CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, DISABLE);
      CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, DISABLE);
      // 其他外设类似




  5. 监控复位源  



    • 唤醒后读取复位状态寄存器(RST_SR),确认是否因看门狗或软件复位导致唤醒:  
      uint8_t reset_source = RST->SR;
      if (reset_source & RST_SR_IWDGF) {
      // 独立看门狗复位
      }




  6. 调试唤醒事件  



    • 在唤醒时通过GPIO引脚输出脉冲(如翻转LED),用示波器监测是否发生意外唤醒。  

    • 若无法调试,尝试在HALT前禁用所有中断(disableInterrupts()),观察电流是否正常。






代码优化建议


void enter_halt_mode(void) {
  // 1. 关闭所有外设时钟
  CLK_PeripheralClockConfig(CLK_Peripheral_ALL, DISABLE);

  // 2. 配置GPIO为低功耗模式
  GPIO_LowPower_Config();

  // 3. 禁用看门狗
  IWDG->KR = 0x00;  // 禁用IWDG

  // 4. 清除所有中断标志
  __disable_interrupts();
  EXTI_ClearITPendingBit(EXTI_IT_ALL);
  __enable_interrupts();

  // 5. 进入HALT模式
  halt();
}



结论


最可能的原因是RTC周期性唤醒看门狗复位导致MCU退出HALT模式后未重新进入。建议优先检查RTC配置及中断处理逻辑,确保唤醒后立即重新进入低功耗状态。同时,彻底关闭所有外设并配置GPIO可避免漏电流问题。通过监测复位源和调试GPIO信号,可快速定位根本原因。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分