大家好: 为了实现低功耗,在进入休眠之前我会将不需要的IO管脚全部配置为模拟输入模式,达到降低功耗的目的。但有一个PD1管脚,这个是另外一个芯片的电源开关,必须保持开的状态,因此要配置成输出,高电平。但是这个管脚一配置,挨着它的PD0管脚就会发生变化。
现象是:PD0是一个led控制管脚。原理图如下。当整个PD端全部设置为模拟输入的时候,测试PD0的电平是1v左右,功耗很低,led灯不亮,然后配置单独PD1为输出,这是PD0的端口就会变为0.8v左右,LED灯会微亮。功耗就上去了。我尝试了调整配置顺序,和不同的配置方法都一样的。求哪位指点一下,这可能是什么原因。
端口配置代码如下:
/****************************************************************************************
* 函 数:g_gpio_all_input
* 功 能:设置所有IO输入 ,进入低功耗
* 描 述:
* 输 入:
* 输 出:
* 注 意:
****************************************************************************************/
void g_gpio_all_input(void)
{
GPIO_InitStruct.Pin = GPIO_PIN_All;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = NoPull;
HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);
HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);
HAL_GPIO_Init(GPIOC,&GPIO_InitStruct);
HAL_GPIO_Init(GPIOF,&GPIO_InitStruct);
/*只有PD1不改变设置,保持输出*/
GPIO_InitStruct.Pin = (GPIO_PIN_All&(~GPIO_PIN_1));
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = NoPull;
HAL_GPIO_Init(GPIOD,&GPIO_InitStruct);
}
|