CH32V003待机多出350多uA不懂多在哪了,详情请看一楼


用内置高速RC震荡器主频8M,使用的ADC通道1,注释掉这部分代码待机电流8.7uA左右,启用后电流366uA左右,有哪些模块还在耗电?

image.png




ADC初始化:

image.png


DMA发送初始化:

image.png

PA1在测量完后进行了下拉输入设置


顶上去,功耗测试都是基于官方店铺买的评估板,断开了供电显示的led以及ldo


您好,在进行低功耗测试时,所有未用的IO口需要配置成下拉输入,要开启PWR时钟,将内部调压器调成低功耗模式,在CH32V003 EVT中有相关例程,可以参考下,如下图。CH32V003 EVT下载链接如下:

https://www.wch.cn/downloads/CH32V003EVT_ZIP.html?

image.png


哪有这么低功耗的,当然得保持原先IO状态啊。否则低功耗意义何在?


我整理重新描述一下

待机以及外部中断的配置:

image.png

DMA_Tx_Init:

image.png

ADC_Function_Init:

image.png


下面是差异的描述内容,功耗测试都是基于官方店铺买的评估板,断开了供电显示的led以及ldo

  1. 程序测量电池电量后进行待机,下面这部分程序执行后待机电流360多uA。

    image.png


2.程序测量电池电量后进行待机,下面这部分程序执行后待机电流9uA左右。

image.png

image.png


我的疑问是多出来的这部分电流是什么没有关闭造成的,我只是用了ADC测量、DMA写入测量数据,还请不要贴个例程糊弄过去。




待机电流360多uA的图不见了,这里补上

image.png


您好,多出来这部分电流是因为你ADC外设时钟没关。针对003系列,要获取更低功耗,在进入待机模式之前要关闭外设时钟。


待机前我已经做了这个操作RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, DISABLE);,请问怎样才能关闭ADC外设时钟,以及你说的要关闭的什么外设时钟?


您好,你可以按照下列解决方法试一下,如下图。在进入待机模式之前,在关闭ADC外设时钟之前调用RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE)函数复位一下再关闭外设时钟或者直接调用调用该函数都行。或者直接调用 ADC_Cmd(ADC1, DISABLE);函数关闭ADC再进入待机模式。我这边复现你的现象之后按照这种方式测试是可行的,若你那边还有问题,可将你的程序发到我的邮箱我这边具体看一下(lzs@wch.cn)

image.png



有效,待机电流下来了      在关闭ADC外设时钟之前调用RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE)函数复位一下再关闭外设时钟 



可能是库没做动作,有些有bug,比如usart的clear flag


只有登录才能回复,可以选择微信账号登录