STM32L462CEU6TR MCU PB3引脚异常电压及功耗问题排查
解决STM32L462CEU6TR STOP2模式下PB3(SWO)引脚异常功耗问题
问题根源
PB3作为SWO引脚,属于TPIU(跟踪端口接口单元)的一部分。即使将引脚配置为模拟模式,若调试相关硬件模块未完全关闭,TPIU仍可能保持激活状态,导致引脚出现异常电压并产生额外功耗。
解决方案
1. 禁用TPIU及调试接口的低功耗保留功能
在进入STOP2模式前,添加代码关闭TPIU并配置调试接口在低功耗模式下停止工作:
// 关闭TPIU CoreDebug->DEMCR &= ~CoreDebug_DEMCR_TRCENA_Msk; TPI->ACPR = 0; TPI->SPPR = 0; TPI->FFCR = 0x100; // 配置调试接口在STOP模式下停止工作 DBGMCU->CR &= ~(DBGMCU_CR_DBG_STOP | DBGMCU_CR_DBG_STANDBY);
2. 单独明确配置PB3引脚
避免使用GPIO_PIN_All批量配置,单独对PB3进行配置,确保GPIO功能完全覆盖复用功能:
// 单独配置PB3为模拟模式,无上下拉 GPIO_InitStruct.Pin = GPIO_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
3. 确保GPIOB时钟正确关闭
在配置完所有GPIO后,确认GPIOB的时钟已被禁用:
__HAL_RCC_GPIOB_CLK_DISABLE();
修改后的关键代码片段
在进入STOP2模式前的代码块修改如下:
/* Set all GPIO in analog state to reduce power consumption, except GPIOC to keep user button interrupt enabled */ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pin = GPIO_PIN_All; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 先批量配置GPIOB除PB3外的引脚 GPIO_InitStruct.Pin = GPIO_PIN_All & ~GPIO_PIN_3; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); // 单独配置PB3 GPIO_InitStruct.Pin = GPIO_PIN_3; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); // 禁用TPIU和调试接口低功耗功能 CoreDebug->DEMCR &= ~CoreDebug_DEMCR_TRCENA_Msk; TPI->ACPR = 0; TPI->SPPR = 0; TPI->FFCR = 0x100; DBGMCU->CR &= ~(DBGMCU_CR_DBG_STOP | DBGMCU_CR_DBG_STANDBY); __HAL_RCC_GPIOA_CLK_DISABLE(); __HAL_RCC_GPIOB_CLK_DISABLE(); __HAL_RCC_GPIOD_CLK_DISABLE(); __HAL_RCC_GPIOE_CLK_DISABLE(); __HAL_RCC_GPIOH_CLK_DISABLE(); /* Enter STOP 2 mode */ HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
额外注意事项
- 确认调试器已经断开连接,因为调试器连接时会强制激活调试接口,导致上述配置失效。
- 查阅STM32L4参考手册中STOP2模式下的引脚状态和电源域配置,确保没有其他模块占用PB3引脚。
内容的提问来源于stack exchange,提问作者Jorge Benedicto
相关产品推荐
相关产品推荐

