GD32F103真正的低功耗怎么搞?
本帖最后由 未成熟的小麦 于 2020-3-20 10:33 编辑在使用GD32F103C8T6,用pmu_to_deepsleepmode(PMU_LDO_LOWPOWER, WFE_CMD);进入深度睡眠,或者用pmu_to_standbymode(WFE_CMD);进入待机模式以后,芯片确实不干活了,也能激活,但芯片的电流还有几个毫安,跟说明书上的电流特性几个uA差好远。
想请教下各位大神,进入低功耗模式有什么要注意的地方呢?在进入低功耗模式之前,有哪些操作能降低功耗呢?谢谢~
你用的最小系统还是? ykwym 发表于 2020-3-19 12:00
你用的最小系统还是?
21IC官方资料下的包和例程改的,没跑别的系统,上来就打开时钟,初始化引脚,初始化pmu,待机 楼上已经问了你系统是什么?要描述清楚
判断是CPU本身耗电,还是外部电路,还是IO口设置问题, 例如悬空的引脚设置输出,有上拉的脚是不是设置有问题,等待 本帖最后由 未成熟的小麦 于 2020-3-20 10:40 编辑
ykwym 发表于 2020-3-19 12:00
你用的最小系统还是?
不好意思,之前理解错了。是用最简单的板测了,只有芯片和32K振荡,高速振荡用芯片内部的,上电初始化了时钟和引脚,引脚都设置成低电平,就进入了standby模式了 。做出来3mA的功耗。上面补了个实验的图。 本帖最后由 未成熟的小麦 于 2020-3-20 10:37 编辑
sjnh 发表于 2020-3-19 12:19
楼上已经问了你系统是什么?要描述清楚
判断是CPU本身耗电,还是外部电路,还是IO口设置问题, 例如悬空的 ...
不好意思,之前理解错了。是用最简单的板测了,只有芯片和32K振荡,高速振荡用芯片内部的。做出来3mA的功耗。上面补了个实验的图。 未成熟的小麦 发表于 2020-3-20 10:32
不好意思,之前理解错了。是用最简单的板测了,只有芯片和32K振荡,高速振荡用芯片内部的,上电初始化了时 ...
GPIO配置为模拟输入 ykwym 发表于 2020-3-20 11:08
GPIO配置为模拟输入
也还是那么大 3mA??GD32E230在4MHz的主频运行下,我是讲运行的情况下也没有这么大的电流。你先把主频降下来看看。
xdqfc 发表于 2020-3-20 15:34
3mA??GD32E230在4MHz的主频运行下,我是讲运行的情况下也没有这么大的电流。你先把主频降下来看看。
...
我用的是内部的IRC8M做主振荡,没用外部高速振荡,应该怎么设置低点的主频呢?是用分频吗? 是不是外设在工作导致电流消耗过大 blust5 发表于 2020-3-20 15:58
是不是外设在工作导致电流消耗过大
没有外设了,你看看我上面放的图,就一个芯片和一个32K的振荡 未成熟的小麦 发表于 2020-3-20 15:59
没有外设了,你看看我上面放的图,就一个芯片和一个32K的振荡
我说的外设是单片机的外设,不是外部电路 blust5 发表于 2020-3-20 16:01
我说的外设是单片机的外设,不是外部电路
初始化到进入standby就这样了,大概就配置了振荡、GPIO、PMU 。大哥能不能给个低功耗的初始化源码看看呢?谢谢
rcu_osci_off(RCU_HXTAL);
systick_config();
nvic_config();
IO_init();
exti_flag_clear(SW1_EXTI);
exti_flag_clear(SW2_EXTI);
exti_flag_clear(SW3_EXTI);
exti_flag_clear(SW4_EXTI);
exti_flag_clear(SW5_EXTI);
exti_flag_clear(SW6_EXTI);
exti_flag_clear(EXTI_17);
rcu_periph_clock_enable(RCU_PMU);
pmu_deinit();
pmu_wakeup_pin_enable();
pmu_flag_clear(PMU_FLAG_RESET_WAKEUP);
pmu_flag_clear(PMU_FLAG_RESET_STANDBY);
gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_10MHZ,0xffff);
gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_10MHZ,0xffff);
gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_10MHZ,0xffff);
gpio_init(GPIOD, GPIO_MODE_OUT_PP, GPIO_OSPEED_10MHZ,0xffff);
GPIO_BC(GPIOA) = 0xffff;
GPIO_BC(GPIOB) = 0xffff;
GPIO_BC(GPIOC) = 0xffff;
GPIO_BC(GPIOD) = 0xffff;
rcu_periph_clock_disable(RCU_GPIOB);
rcu_periph_clock_disable(RCU_GPIOC);
rcu_periph_clock_disable(RCU_GPIOD);
pmu_to_standbymode(WFI_CMD);
本帖最后由 cosmoslogic 于 2020-3-20 16:15 编辑
请把你的串口线拔掉,保证MCU没有任何外接电路连接,再用万用表去测试电流,排出串口漏电,刚看错了,你连的是仿真器的数据线把,断开 本帖最后由 cosmoslogic 于 2020-3-20 16:21 编辑
漏电流 cosmoslogic 发表于 2020-3-20 16:14
请把你的串口线拔掉,保证MCU没有任何外接电路连接,再用万用表去测试电流,排出串口漏电,刚看错了,你连 ...
断开了也没区别 根据你设置的IO状态来判断下到底有没有进入睡眠 cosmoslogic 发表于 2020-3-20 16:25
根据你设置的IO状态来判断下到底有没有进入睡眠
怎么判断有没进去呢?后面的引脚操作都没动静了,应该是进了吧。而且这个时候接上烧录线,点烧录也不能烧录了。 未成熟的小麦 发表于 2020-3-20 16:10
初始化到进入standby就这样了,大概就配置了振荡、GPIO、PMU 。大哥能不能给个低功耗的初始化源码看看呢 ...
你那么大个亮着的led不耗电吗{:sweat:}