GD32 低功耗模式-深度睡眠模式(包含1,2)电流达不到规格书的要求

深度睡眠模式,深度睡眠模式1,深度睡眠模式2在测试时电流比数据手册中大得多!
1.测试GD32E503RE芯片时,发现各个低功耗模式的电流分别为
run mode:3.0-3.3mA左右
sleep mode:2.4-2.5mA
deepsleep:1.46-1.51mA
deepsleep1:1.38-1.42mA
deepsleep2:1.28-1.34mA
standby mode:3.02-3.10uA
2.通过代码改动测试后测试出的值为:
sleep mode:1.88mA左右
deepsleep:0.26-0.280mA左右
deepsleep1:0.190-0.210mA左右
deepsleep2:0.090-0.100mA左右
standby mode:2.95-3.10uA左右
以上改动后的值达到了数据手册中的低功耗模式中的各个模式的预设电流值。

其实最初在GD32E503RE产品测试中测试待机模式时,通过去除所有外围电路设备,电源供电,用电流表测试出来的电流为3.02-3.10uA,这是在数据手册中待机电流的范围内的,所以就没有测试睡眠模式和深度睡眠模式,以为功耗还是与手册中的数据是匹配的。后来因为产品测试其他低功耗功能,用深度睡眠模式时检测发现电流仍有1.5-2mA,远远大于数据手册中深度睡眠的电流值:0.21-0.46mA(典型值),以及测量睡眠模式和其他模式之后,得到了最开头第一次的数据,确实与数据手册中低功耗各个模式的电流值有较大差距。

那么我们参考一下官方给的例程和固件库的例子代码:
深度睡眠模式例程:

待机模式例程:

通过例程可以发现实现低功耗模式的主要代码是:
使能电源管理单元:rcu_periph_clock_enable(RCU_PMU);
使能唤醒:pmu_wakeup_pin_enable(PMU_WAKEUP_PIN0);
进入低功耗模式:
睡眠模式:pmu_to_sleepmode()
深度睡眠模式:pmu_to_deepsleepmode()
深度睡眠模式1:pmu_to_deepsleepmode_1()
深度睡眠模式2:pmu_to_deepsleepmode_2()
待机模式:pmu_to_standbymode(WFI_CMD);

例程之中并没有给出把所有IO口配置为下拉等特定的模式,因此最初猜测问题出现在IO口占用了电流,所以我们把所有IO口配置为模拟输入,因为模拟输入占用的电流很小,基本等于零,而IO口浮空输入占用的功耗最大,所以一定要注意。

因此我们需要在进入低功耗模式前把所有IO口的时钟打开,然后把所有IO口配置为模拟输入,再进入低功耗模式。
如图:

我这里实现的是通过PA1,PA2,PA3,PA4,PA5杜邦线连接3.3V高电平进入五个不同的模式,因此最开始打开了GPIOA的时钟是为了进入while(1)中的判断语句.

使能按键唤醒:pmu_wakeup_pin_enable(PMU_WAKEUP_PIN0);
唤醒的方法有两种:唤醒的方法有两种:
1.WFI_CMD:中断唤醒。如果睡眠模式是通过执行 WFI 指令进入的,任何来自 EXTI 的中断可以将系统从低功耗模式中唤醒。
2.WFE_CMD:事件唤醒。如果睡眠模式是通过执行 WFE 指令进入的,任何来自 EXTI 的事件可以将系统从低功耗模式中唤醒。

最终即可达到开头第二次测出来的各个低功耗模式的电流值。

其他低功耗模式的使用方法同理!

  • 27
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值