stm32系列问题:低功耗设计

程序问题

问题1:在程序不同位置进入停机(HAL_PWR_EnterSTOPMode)功耗不同。

说明:在程序刚开始直接进入停机模式后,功耗可以直接维持在16ua左右,但是在之后经过ADC检测程序后进入停止功耗会提高到1ma左右。原因是,ADC检测以后没有将ADC停止。

停机程序如下。

void EnterStopMode(void)
{
	HAL_SuspendTick(); //暂停系统滴答定时器,对于停机很有效果

	GPIO_InitTypeDef GPIO_InitStruct;
	//	// 初始化 GPIO_InitStruct
	GPIO_InitStruct.Pin = GPIO_PIN_All; // 使用 GPIO_PIN_All 表示所有引脚
	GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; // 设置模式为模拟输入
	GPIO_InitStruct.Pull = GPIO_NOPULL; // 不使用上拉或下拉
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 选择低速度

	// 应用配置到所有 GPIO 引脚
	HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 这里的 GPIOx 应替换为你要初始化的 GPIO 端口
	HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); // 这里的 GPIOx 应替换为你要初始化的 GPIO 端口
	HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); // 这里的 GPIOx 应替换为你要初始化的 GPIO 端口
	HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); // 这里的 GPIOx 应替换为你要初始化的 GPIO 端口
	HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); // 这里的 GPIOx 应替换为你要初始化的 GPIO 端口

	GPIO_InitStruct.Pin = GPIO_PIN_9; // 使用 GPIO_PIN_All 表示所有引脚
	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 设置模式为模拟输入
	GPIO_InitStruct.Pull = GPIO_PULLDOWN; // 不使用上拉或下拉
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 选择低速度

	HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

}

低功耗硬件复位

在进行单片机低功耗开发的时候,单片机进入停机模式后无法下载程序,只能通过手动复位进行解决,但是有些产品当中没有预留复位按键只能进行重新上电,但是这样又会导致,重新上电的时候因为电容当中存储使单片机正常工作,从而导致需要等待很长的时间才能进行复位。

解决:这时候建议将产品的复位引脚引出连接下载器的rest引脚,并在下载器中配置以下即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值