打印
[STM32F0]

STM32F030低功耗测试

[复制链接]
7174|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
IversonCar|  楼主 | 2015-8-30 08:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
测试芯片:STM32F030
测试PCB板:自主读卡模块PCB
测试电源:PCB板5V输入经过低压差LDO输出3.3V LDO自身功耗2.99uA
低功耗模式:待机模式+IWDG看门狗唤醒



电流数据:
SMT32F030C8T6                   4.32uA   
低压差LDO                           2.99uA
读卡IC低功耗                       0.07uA




低功耗测试注意事项:
测试过程中也曾经出现电流大的现象,现在逐一说明

1.最开始直接调用库函数《PWR_EnterSTANDBYMode();》进入待机模式函数,发现电流有几个mA,经过测量IO口发现进入待机模式后个别IO口有高电平有低电平,电流消耗明显,因此在进入待机模式前先将全部IO配置为输入模式、下拉使能,再次测试进入待机模式,电流减小为17.25uA。

2.17.25uA也与数据手册待机模式的几个微安还是相差甚远,最后经过全面搜罗资料与借鉴别人经验发现一个特点,STM32F030必须在进入待机模式前调用《RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);》使能电源管理寄存器时钟函数,否则也能进入待机模式,但电流会增大十几个微安。此时电流减小为3.24uA。

3.配置好IWDG看门狗,电流略有增加变为4.32uA,看门狗消耗电流1.08uA。此时待机低功耗模式基本正常。





调试经验:
1.如果进入待机模式电流为mA级别,那一定是IO口或者外设配置问题导致消耗电流比较大,需要重点检查IO配置和外设配置。

2.如果进入待机模式电流为几十uA的级别,那就要确认是否已经使能电源管理的时钟,如果电源管理时钟已经使能则需要检查PCB板焊接后是否清洗干净,实测焊接一个外部芯片或者电源的滤波电容,若不清洗干净会导致电流增大数uA到数十uA, 所以电流在数十uA级别时不一定是配置问题,有可能是你的PCB板没洗干净导致电流泄露引起的电流过大。切记PCB洗干净,否则也会在测试过程中发现每焊接一次再测试板子的电流就与上次测试电流不同了,我是每次焊接完成拿洗板水清晰两次,芯片的话引脚会清晰多次。

3.测试电流最好用指针的微安表,能直观的观察到电流的变化和波动,数字万用表数字跳动很难确定实际功耗电流。并且不同级别的数字表测试uA电流有可能差别很大,甚至比指针表大很多,不要盲目迷信数字表,我用安捷伦的手持表测试uA依然数字乱跳。

4.指针微安表可以并接一个低压差的二极管,来保护uA表免受在上电过程中的瞬间大电流的冲击。这个是通过二极管的PN结压降实现的,原理请自行百度。

5.关于编程,我是用SWD接口编程,为了省空间去掉了SWD的复位脚,造成进入待机模式后时钟停止无法进入编程模式,此时只要先用镊子将复位脚对地短接,然后点击下载,看到下载器开始检测芯片时松开复位脚即可正常编程。
最终效果
测试板最终效果实现每200ms唤醒一次,然后启动读卡芯片读卡,成功读到卡后通过UART接口把卡号发送出去然后进入休眠,若检测不到卡片则直接进入休眠等待下次唤醒。正常工作电流:有卡时=12uA~14uA  无卡时=9uA~11uA



评分
参与人数 2威望 +10 收起 理由
lfjwfm + 5 很给力!
mmuuss586 + 5 赞一个!
沙发
IversonCar|  楼主 | 2015-8-30 08:44 | 只看该作者
部分测试代码示例
nt main(void)
{
    SystemInit();                                        // 配置系统时钟           
    SysTick_Config(TICK_10ms);                 // 配置系统时基定时器
    IWDG_Init(IWDG_200ms);                    // 初始化看门狗

    while(1)
    {
         LowPowerIOConfig();                      // 所有IO口配置为输入 下拉使能
         RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); // 使能电源管理时钟
         PWR_EnterSTANDBYMode();            // 进入待机模式
     }
}

使用特权

评论回复
板凳
Mancherstun| | 2015-8-30 09:26 | 只看该作者
stm32的低功耗和飞思卡尔的比那个更低呢

使用特权

评论回复
地板
mmuuss586| | 2015-8-30 09:47 | 只看该作者

谢谢楼主分享;

使用特权

评论回复
5
追逐浪花| | 2015-8-30 16:08 | 只看该作者
关于编程,我是用SWD接口编程,为了省空间去掉了SWD的复位脚,造成进入待机模式后时钟停止无法进入编程模式
这个问题可以在软件复位那里设置一下的

使用特权

评论回复
6
xia00| | 2015-8-30 23:16 | 只看该作者
不错不错,这种测试很有意义啊赞!!!

使用特权

评论回复
7
tangmix| | 2015-9-2 10:50 | 只看该作者
关注低功耗,赞一个

使用特权

评论回复
8
tgwfcc| | 2015-11-24 16:10 | 只看该作者
本帖最后由 tgwfcc 于 2015-11-28 11:48 编辑

你好啊,我也是用F030C8测低功耗的,我用万用表量的,停止和待机模式下都是18uA啊,停止模式还正常,待机模式就不对了。
代码是:
int main(void)
{
        SystemInit();
        //GPIO复位后默认是下拉输入模式
        GPIO_Configuration();
        //RCC_APB1PeriphResetCmd(RCC_APB1Periph_PWR,ENABLE);
        
        NVIC_SystemLPConfig(NVIC_LP_SLEEPDEEP,ENABLE);

        PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);
        while(1)
        {
        }

}
把代码改了下,STOP模式下,电压调节器打开或是关闭,电流也是这么多,这也不正常啊?

使用特权

评论回复
9
309030106| | 2015-11-24 19:22 | 只看该作者
stm32的低功耗和飞思卡尔的比那个更低呢

这个应该看具体的型号了吧

使用特权

评论回复
10
捉虫天师| | 2015-11-24 19:54 | 只看该作者
这个应该不是超低功耗系列的,我看抄底功耗的STM32都是这样命名的:STM32Lxxx

使用特权

评论回复
11
tgwfcc| | 2015-11-28 11:51 | 只看该作者
tgwfcc 发表于 2015-11-24 16:10
你好啊,我也是用F030C8测低功耗的,我用万用表量的,停止和待机模式下都是18uA啊,停止模式还正常,待机模 ...

找到问题了,还是自己复制函数的时候不仔细,RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);写成RCC_APB1PeriphResetCmd(RCC_APB1Periph_PWR,ENABLE);,导致电流增大了十几个uA,刚好和停止模式下的电流一样,最终结果是3.1uA,加上IWDG,4.2uA。这才是正确的数据。

使用特权

评论回复
12
凯尔安德森| | 2017-1-11 16:23 | 只看该作者
楼主您好,我最近才开始学习低功耗模式,对于您说的测量电流有一些不太明白,能否详细告知您测量电流的方法和具体做法,比如如何接线,接单片机的哪几个管脚?非常感谢!!!

使用特权

评论回复
13
showgu| | 2017-5-7 23:41 | 只看该作者
030 都这么低,这样很多都不用选 stm8L 了

使用特权

评论回复
14
viseng| | 2017-5-18 10:02 | 只看该作者
不错,锂电包供电级别,这种测试是非常实用的

使用特权

评论回复
15
viseng| | 2017-5-18 10:17 | 只看该作者
试过把IO配置成输出高阻的状态吗?毕章MCU内部的上下拉属于弱上下拉,设成输入的方式,抗干扰能力方面有不确定性。未使用引脚设成输出高阻(开漏置1)应该更可靠。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

344

帖子

0

粉丝