参考了STM32L476官方例程 在进入stop2模式前 将所有端口设置为模拟输入- GPIO_InitTypeDef GPIO_InitStruct;
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
- __HAL_RCC_GPIOC_CLK_ENABLE();
- __HAL_RCC_GPIOD_CLK_ENABLE();
- __HAL_RCC_GPIOE_CLK_ENABLE();
- __HAL_RCC_GPIOF_CLK_ENABLE();
- __HAL_RCC_GPIOG_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);
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
- HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
- HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
- HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
- HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
- HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
- __HAL_RCC_GPIOA_CLK_DISABLE();
- __HAL_RCC_GPIOB_CLK_DISABLE();
- __HAL_RCC_GPIOC_CLK_DISABLE();
- __HAL_RCC_GPIOD_CLK_DISABLE();
- __HAL_RCC_GPIOE_CLK_DISABLE();
- __HAL_RCC_GPIOF_CLK_DISABLE();
- __HAL_RCC_GPIOG_CLK_DISABLE();
- __HAL_RCC_GPIOH_CLK_DISABLE();
复制代码
发现单片机无法进入stop2,将这段程序删除在cubemx将空闲引脚设为低功耗模式,可以正常进入低功耗和唤醒,但是待机时的电流很大有400多微安,求各位大佬帮帮忙,看一下是那个地方出了问题。
|
HAL库有专门停止ADC和DMA采样的函数:
以及关闭ADC外设的函数:
谢谢大佬 我试了一下关闭adc和dma的函数 电流从400微安降低到了100微安随后又变成了2微安,但是我初始化adc的方式可能不对导致 adc测得的数值存在问题 请问重新开启adc应该用哪个函数
重新开启ADC相当于你再次初始化你的ADC,如果你是用CubeMX生成的代码,应该在main函数中有一个MX_ADC_Init调用的,再次调用MX_ADC_Init即可重启你的ADC。