You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32L431停止模式下内部COMP高功耗问题排查求助

STM32L431停止模式下COMP反初始化后高功耗问题

问题描述

使用STM32L431内部比较器(COMP)时,信号对比功能正常,但启用COMP后设备进入停止模式(Stop Mode)时电流功耗大幅升至195uA。已在进入停止模式前调用HAL_COMP_DeInit(&hcomp1)对COMP反初始化,但高功耗问题仍未解决。

代码片段

主循环停止模式进入代码

while (1)
{
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    
    HAL_SuspendTick(); // 禁用系统滴答中断

    HAL_COMP_DeInit(&hcomp1); // 进入停止模式前反初始化比较器

    HAL_PWR_EnableSleepOnExit(); // 启用外部中断唤醒后睡眠
    HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,  PWR_STOPENTRY_WFI);  
}

COMP触发回调函数(中断服务函数)

/* USER CODE BEGIN 4 */
void HAL_COMP_TriggerCallback(COMP_HandleTypeDef *hcomp) // COMP1_ISR
{ 
    SystemClock_Config(); // 重新初始化时钟(此前时钟已暂停)
    HAL_ResumeTick();    // 恢复系统滴答,可使用延时功能

    HAL_PWR_DisableSleepOnExit(); // 禁用退出后睡眠
}
/* USER CODE END 4 */

功耗对比

根据STM32L431RC数据手册,停止模式下总功耗应不超过5uA(图#01:MCU停止模式电流),但启用COMP后总功耗(MCU+COMP)接近200uA(图#02:MCU+内部比较器停止模式电流),怀疑COMP未正确进入低功耗状态。

排查方向与解决建议

  • 手动确认COMP寄存器状态:HAL_COMP_DeInit可能仅复位部分寄存器,需直接操作寄存器关闭COMP并禁用相关中断:
    COMP->CSR &= ~(COMP_CSR_EN | COMP_CSR_ITEN);
    
  • 检查电源域与总线时钟:COMP依赖VDDA电源域,进入停止模式前需确认无其他外设占用VDDA;同时COMP属于APB1外设,需确保APB1总线时钟已正确关闭。
  • 优化引脚低功耗配置:将COMP输入引脚配置为模拟输入或浮空模式,避免漏电流:
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = COMP_INPUT_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(COMP_INPUT_PORT, &GPIO_InitStruct);
    
  • 清除中断挂起标志:若COMP作为唤醒源,需确保中断挂起标志已清除,避免硬件持续触发中断:
    __HAL_COMP_CLEAR_FLAG(&hcomp1, COMP_FLAG_IT);
    
  • 检查时钟配置函数:回调中的SystemClock_Config()可能默认开启COMP时钟,导致退出停止模式后COMP被重新启用,需修改该函数仅在需要时开启COMP时钟。
  • 最小系统验证:移除其他外设,仅保留COMP和必要电路测试功耗,排除其他外设干扰。

内容的提问来源于stack exchange,提问作者Ubaid Ullah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:00:35