我有一块带STM32L433的电路板,在STOP 2模式下有大约320uA的基线电流消耗。只有具有32kHz晶振的LSE才有效。该板具有独立的模拟Vdda电源,在停止模式下被禁用。(与地面相连)。在禁用Vdda之前,ADC,DAC和OPAMP禁用,其引脚进入OD低电平模式。配置使用STM32CubeMX软件完成。任何想法如何调试这个?我断开并测量了几乎每个外围设备,看看是什么吸引电流,但似乎STM32L433是罪魁祸首。我用示波器测量电流,使用与电池串联的2欧姆电阻。LDO可能负责20uA,但是还有300uA却不明。我只用STM32L433和LDO LP5907-3.0以及几个去耦电容焊接了另一块电路板。同样的问题。这是我用来设置GPIO的最小代码- <font size="4">GPIO_InitTypeDef GPIO_InitStruct;
- /* GPIO Ports Clock Enable */
- __HAL_RCC_GPIOC_CLK_ENABLE()
- ;
- __HAL_RCC_GPIOH_CLK_ENABLE()
- ;
- __HAL_RCC_GPIOA_CLK_ENABLE()
- ;
- __HAL_RCC_GPIOB_CLK_ENABLE()
- ;
- GPIO_InitStruct.Pin = 0xFFFFFFFF;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- HAL_GPIO_WritePin(GPIOA, GPIO_InitStruct.Pin, GPIO_PIN_SET);
- GPIO_InitStruct.Pin = 0xFFFFFFFF;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- HAL_GPIO_WritePin(GPIOB, GPIO_InitStruct.Pin, GPIO_PIN_SET);
- GPIO_InitStruct.Pin = 0xFFFFFFFF;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
- HAL_GPIO_WritePin(GPIOC, GPIO_InitStruct.Pin, GPIO_PIN_SET);
- GPIO_InitStruct.Pin = 0xFFFFFFFF;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
- HAL_GPIO_WritePin(GPIOH, GPIO_InitStruct.Pin, GPIO_PIN_SET);
- //BOOT0 PIN
- GPIO_InitStruct.Pin = GPIO_PIN_3;
- GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
- HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);</font>
复制代码当USB输入处于低功耗模式时,USB DM引脚会浮动。这导致了200uA当前的卓尔精灵。向外拉这个引脚可以移除200uA。现在我正试图在固件中找到解决方法。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
暂停后USB被置于低功耗模式
void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd){
.....
hpcd->Instance->CNTR |= USB_CNTR_FSUSP;
hpcd->Instance->CNTR |= USB_CNTR_LPMODE;
...
浮动USB DM引脚会产生剩余的~200uA残余。(浮动数字输入消耗功率(慢速或浮动CMOS输入的影响)
解决方案是使用/启用内置于此芯片中的电池充电检测电路。
像这样的东西:
PCD_HandleTypeDef *hpcd = (PCD_HandleTypeDef*)hUsbDeviceFS.pData;
USB_TypeDef *USBx = hpcd->Instance;
int stabilizationCounter = 0;
HAL_PCDEx_ActivateBCD(hpcd);
//run on a 10ms Timer
if( USBx->BCDR & USB_BCDR_DCDET ){
stabilizationCounter++;
if( stabilizationCounter >= USBPC_STABILIZATION_TIME ){
USBD_Start(&hUsbDeviceFS);
//stop the timer
}
}else{
stabilizationCounter = 0;
}
注意: HAL确实有一个void HAL_PCDEx_BCD_VBUSDetect(PCD_HandleTypeDef *hpcd)
功能,但是你应该在检测到VBus电源后自己调用它。这意味着使用额外的引脚,在我的情况下是一个大的布局重新洗牌。ST推荐电路的一些细节是使用STM32 MCU的USB硬件和PCB指南
LDO(~10uA)和肖特基二极管(~30uA)的反向漏电流仍然有40uA,但至少有文献证明。
一周热门 更多>