STM32低功耗实验总结

发布者:RadiantSerenity最新更新时间:2019-12-20 来源: eefocus关键字:STM32  低功耗  实验总结 手机看文章 扫描二维码
随时随地手机看文章

1、首先回答一个问题,STM32能不能做低功耗? 
回答是肯定的,这个是有数据支持的,我测试的STM32101CB,FLASH:128K,RAM:16K并且RTC工作的情况下,测试到的功耗为16uA应该说还是相当不错的。 


2、STM32低功耗有哪些需要注意的地方? 
一开始我测试到STM32为16uA的时候,还是非常高兴的,以为真的可以做为我的应用,我的应用是让MCU定时醒来干活,干一会就睡觉,可能干活的时间就几十个毫秒。可是后来发现有些问题(工作在STOP模式): 


1) 时钟问题:STM32被唤醒以后的时钟自动切换到内部HIS RC振荡器,大家都是知道的,RC振荡器的精度是不高的。而且,睡觉前对于时钟的设置都是恢复到复位状态,只是时钟这个地方复位,其他的没有。这也会带来一个问题,可能你睡觉前使用的是内部时钟,可是睡觉后,时钟却变了,带来的问题就是UART和定时器。或许你想不使用PLL,就是8M,这样醒来后的时钟HIS也是8M,这样虽然在时钟上没有差别了,但是时钟却不稳定了。UART波特率肯定不能太高,否则通信会有问题。 


2) 醒来时间:这个问题也是个非常大的问题,datasheet上给出的醒来时间是7us,这个可能真的不假,但是醒来,不能马上干_你的活,为什么。初始化IO,你可能问,我不初始化不行吗,回答应该是否定的。因为,如果你想使用低功耗的话,睡觉前IO口都应该设置为模拟输入,这样才能达到datasheet上的14uA,但是这样也带来一个问题,那就是初始化IO,醒来必须要初始化IO。如果你还想把时钟切换到外部时钟,耗时会更加长,接近200ms,因为STM32会等待外部时钟稳定后才能工作,然后还要在重新初始化所有IO,这个非常的耗时。可能我只需要醒来10ms,但是这些活干完就需要100ms。 


3) RTC唤醒:RTC这个也是个问题,为什么?大家需要注意的是RTC只能使用报警才能唤醒MCU,秒中断是不可以唤醒的。并且报警中断必须不停的设置,设置一次只生效一次,中断完了,还需要设置下次中断的时间。并且还有个问题,报警中断必须等待到秒中断到了之后才能设置,也就是正好秒寄存器更新了一次的时候设置,这就带来一个问题,等待秒中断。如果睡前还想再能被报警唤醒的话必须重新设置报警中断,而且设置报警中断的时候需要等到秒中断才能设置新的值。这个等待的时间是不定的。可能会几百个毫秒。说以要空空的耗费几百个毫秒等到秒中断标志来设置报警中断。可能我的MCU只需要执行10ms就需要睡觉了。还是要空空的耗费掉几百个毫秒 


总结:在使用的过程中发现的问题,我都在上面说明了,我觉得STM32的低功耗太假,虽然在睡眠的时候性能不错,但是醒来,和进入睡眠的设置太麻烦,耗时太多,这是个弊端,我觉得MSP430估计是做的最好的了,即使是AVR也比他好点,没有那么麻烦。


拿到STM32L的样片后,一直纠结于低功耗的测试,因为和STM32F系列的配置不同,所以导致了杯具,通过和ST公司不停的咨询,终于得到了最终的结果, 
经过测试,功耗在STOP模式下为 500nA ,性能还是不错的,代码如下: 

/** 
  * @brief  Main program. 
  * @param  None 
  * @retval None 
  */ 
int main(void) 

  /*!< At this stage the microcontroller clock setting is already configured, 
       this is done through SystemInit() function which is called from startup
       file (startup_stm32l1xx_md.s) before to branch to application main.
       To reconfigure the default setting of SystemInit() function, refer to
       system_stm32l1xx.c file 
     */ 
     /* Configure all unused GPIO port pins in Analog Input mode (floating input
     trigger OFF), this will reduce the power consumption and increase the device
     immunity against EMI/EMC *************************************************/
    GPIO_InitTypeDef GPIO_InitStructure; 
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC 

                        | RCC_AHBPeriph_GPIOD | RCC_AHBPeriph_GPIOE | RCC_AHBPeriph_GPIOH, ENABLE);

    /* config all IO to Analog Input to reduce parasite power consumption */

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; 

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_400KHz;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

    GPIO_Init(GPIOC, &GPIO_InitStructure); 

    GPIO_Init(GPIOD, &GPIO_InitStructure); 

    GPIO_Init(GPIOE, &GPIO_InitStructure); 

    GPIO_Init(GPIOH, &GPIO_InitStructure); 

    GPIO_Init(GPIOA, &GPIO_InitStructure); 

    GPIO_Init(GPIOB, &GPIO_InitStructure);  

    /* Enable PB7 as external PVD input so as to set it as AIN_IN */
    Set_PVD_To_Config_PB7(); 

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA  
                          | RCC_AHBPeriph_GPIOB 
                          | RCC_AHBPeriph_GPIOC 
                          | RCC_AHBPeriph_GPIOD 
                          | RCC_AHBPeriph_GPIOE 
                          | RCC_AHBPeriph_GPIOH, DISABLE);
     
    PWR_UltraLowPowerCmd(ENABLE); 
    PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
    while(1); 

/** 
  * @brief  Enable PB7 as external PVD input so as to set it as AIN_IN 
  * @param  None 
  * @retval None 
  */ 
void Set_PVD_To_Config_PB7(void) 

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); 

  /* Configure the PVD Level to 3 (2.5V) */
  PWR_PVDLevelConfig(PWR_PVDLevel_7); 

  /* Enable the PVD Output */ 
  PWR_PVDCmd(ENABLE);   
}

关键字:STM32  低功耗  实验总结 引用地址:STM32低功耗实验总结

上一篇:STM32L151C8周期性从待机模式唤醒(RTC Wakeup Timer)
下一篇:stm8L15x EEPORM学习笔记

推荐阅读最新更新时间:2024-11-07 16:04

关于STM32库函数中,u8_u16_等的定义
//stm32f10x.h文件内定义 typedef uint32_t u32; typedef uint16_t u16; typedef uint8_t u8; //无符号 typedef int32_t s32; typedef int16_t s16; typedef int8_t s8; //有符号 /* exact-width unsigned integer types */ typedef unsigned char uint8_t; typedef unsigned short int uint16_t; typedef unsigned int uint32_t; type
[单片机]
STM32蜂鸣器pwm控制频率播放音乐
通过修改输出的pwm波的频率来达到不同的音频 单片机源程序如下: #include stm32f10x.h #include led.h #include delay.h #include sys.h #include timer.h #define proport 10000 //Tclk/(psc+1)=72000000/(7199+1) #define L1 ((proport/131)-1)//低调 do 的周期根据Tout= ((arr+1)*(psc+1))/Tclk推出arr值就是本句define定义的值,Tout为音调频率131Hz的倒数,Tclk=72MHz #define L2
[单片机]
STM32中为什么要引入链表?
1、为何引入链表 在程序中经常面临一个问题,我们需要保存一定数量的对象,但是对象数目是不确定的,或者说是随时增加或减少的。这时候最简单的方法是创建一个足够大的数组,用来存储这些对象。我最近开发一个项目就遇到类似的问题,下面我把问题简化一下。 需求:通过PC下发一些矩形的坐标和宽高信息,每个区域有个ID编号,并在这些矩形内填充一定的数据。 通常情况下,最简单易懂的做法是,限制最多5个区域,每个区域存储1K数据。因此设置了这样的一个结构体(类似于面向对象语言里说的成员属性)。 typedef struct Area_Inf{ uint8_t ID; uint8_t X; uint8_t Y; uint8_t Width;
[单片机]
在<font color='red'>STM32</font>中为什么要引入链表?
低功耗手多媒体终端硬件平台的研究
摘要:通过选择低功耗器件,特别是高效率DC/DC变换器,合理进行电路板布线,优化结构级设计,进行系统级功率管理,从而延长电池工作时间。根据多媒体终端的要求,选择了许多新工艺器件,极大地降低了系统功耗。 关键词:低功耗 OMAP1510 能源效率 DC/DC变换器 手机、PDA等手持设备对图像、音频处理能力的要求日益提高,同时要求设备的体积、重量越来越小。这些设备一般靠单节可充电锂电池作为电源。因而提高处理能力,降低系统功耗以延长电池工作时间是手持设备的重要研究课题 。 参考文献 讨论了低功耗的系统设计技术,特别强调减小电容,缩减不必要的开关行为,降低电压和频率。外部器件间的连接通常比片上连接电容更大。实验证明10%~40%的
[应用]
stm32专题三十八:在SRAM中调试代码
在 RAM 中调试代码的优点: 在 RAM 中调试代码的缺点: stm32的启动方式: (1)从地址 0x00000000 处取出栈指针 MSP 的初始值,该值就是栈顶的地址; (2)从地址 0x00000004 处取出程序指针 PC 的初始值,该值指向复位后应执行的第一条指令; 上述过程由内核自动设置运行环境并执行主体程序,因此它被称为自举过程。 这个实际上和启动文件是相对应的: 实际应用中,我们会根据BOOT0和BOOT1两个引脚,把这两个地址映射到其他地址空间; 对于内部FLASH和内部SRAM已经很熟悉了,系统存储器是什么? 实际上,当我们按住复位然后松开时,内核就会从映射到的地址,取出
[单片机]
<font color='red'>stm32</font>专题三十八:在SRAM中调试代码
Atmel在2016 CES上展示低成本低功耗互联平台
该平台面向新一代物联网和可穿戴解决方案,将超低功耗Atmel | SMART SAM L21 MCU、BTLC1000 BLE解决方案和软件生态系统整合到一个简单且灵活的规格尺寸之中 全球微控制器(MCU)及触控技术解决方案领域的供应商Atmel公司 (纳斯达克股票交易代码:ATML)今日发布了一款面向成本优化型物联网(IoT)和可穿戴应用的完整超低功耗互联平台。该新平台采用全球功耗最低的ARM Cortex -M0+内核之Atmel | SMART SAM L21 和荣获大奖的BTLC1000 蓝牙智能解决方案,为那些需要监测活动和环境的电池供电型应用提供了完美的解决方案。 低功耗互联平台的关键组件包括Atmel |
[物联网]
德州仪器推出首款量产超低功耗双频无线MCU
2016年9月13日,北京讯 为了扩展物联网(IoT)的功能性,德州仪器(TI)今日宣布推出业界功耗最低的双频无线微控制器(MCU),这款已量产的MCU可以在单芯片上支持Sub-1 GHz和Bluetooth 低功耗连通性。作为TI引脚和软件兼容的SimpleLink 超低功耗平台的一员,这款全新的SimpleLink双频CC1350无线MCU能够帮助开发人员利用一个微型单芯片取代以往的三芯片解决方案,同时降低设计的复杂度、节省功耗、成本和电路板空间。CC1350无线MCU在由一颗纽扣电池供电的情况下能够覆盖高达20km的范围,满足了楼宇和工厂自动化、警报和安防、智能电网、资产跟踪和无线传感器网络等应用的需求。 针对低功耗
[物联网]
STM32 Bootloader 跳转
1. Bootload #define ApplicationAddress 0x08003000 2. App 修改
[单片机]
<font color='red'>STM32</font> Bootloader 跳转
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved