zoukankan      html  css  js  c++  java
  • stm8s和stm8l低功耗对比

    stm8s和stm8l低功耗对比  

      在低功耗应用中,一般来说mcu是常态halt模式,然后偶尔被唤醒(外部中断或者内部定时唤醒)进入运行模式。所以对比低功耗性能,一般来说只需要对比run模式和halt下的功耗即可,因为项目选用的是通过内部定时器唤醒,所以选用active halt mode。以下是stm8s003和stm8l151在这两种模式下的功耗对比: 

    run mode:

    •  stm8s

      

    •  stm8l

      

    • 对比

       在使用同样的16M内部RC振荡器情况下,stm8s 3.7ma,stm8l 3.54ma,两款mcu耗电量差不多。

    active halt mode:

    • stm8s

      

    • stm8l

      

    • 对比

      在同样的关闭外设,且使用内部低速RC振荡器唤醒的情况下:stm8s 10ua,stm8l 0.54ua。大约有20倍的差距,不过对于要求不是特别高的情况下,ua级别的差距影响不会太大。

    实测:

    为了实际验证,分别将单片机焊接到空板子上编写代码进行测试。

    stm8 编写如下代码:

    32ms唤醒一次

    主程序:

    void main(void)
    {
      CLK_HSECmd ( DISABLE );
      CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);

      AWU_DeInit();
      AWU_Init(AWU_TIMEBASE_32MS);
      CLK_SlowActiveHaltWakeUpCmd(ENABLE); //关闭活跃停机模式下的电压调节器(MVR)
      CLK_FastHaltWakeUpCmd(DISABLE); //关闭快速唤醒
      FLASH_SetLowPowerMode(FLASH_LPMODE_POWERDOWN); //设置为停机后flash掉电

      GPIO_Init(GPIOA,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_LOW_SLOW);
      GPIO_Init(GPIOB,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_LOW_SLOW);
      GPIO_Init(GPIOC,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_LOW_SLOW);
      GPIO_Init(GPIOD,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_LOW_SLOW);

      GPIO_WriteLow(GPIOA,GPIO_PIN_ALL);
      GPIO_WriteLow(GPIOB,GPIO_PIN_ALL);
      GPIO_WriteLow(GPIOC,GPIO_PIN_ALL);
      GPIO_WriteLow(GPIOD,GPIO_PIN_ALL);

      AWU_Cmd(ENABLE);

      while(1)
      {
      halt();
      }
    }

    中断处理程序:

    INTERRUPT_HANDLER(AWU_IRQHandler, 1)
    {
      /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
      */
      u8 awu_temp = 0;
      awu_temp = AWU_GetFlagStatus();
    }

     程序下载到单片机后,串到台式万用表上实测电流11ua,见下图:

    stm8l 编写如下代码:

    32ms唤醒一次

    主程序:

    void main(void)

    {

      GPIO_Init(GPIOA, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
      GPIO_Init(GPIOB, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
      GPIO_Init(GPIOC, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
      GPIO_Init(GPIOD, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
      GPIO_Init(GPIOE, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
      GPIO_Init(GPIOF, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);

      GPIO_Write(GPIOA,0x00);
      GPIO_Write(GPIOB,0x00);
      GPIO_Write(GPIOC,0x00);
      GPIO_Write(GPIOD,0x00);
      GPIO_Write(GPIOE,0x00);
      GPIO_Write(GPIOF,0x00);

      RTC_DeInit(); //初始化默认状态
      CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE); //允许RTC时钟
      CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1); // 38K/1
      RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div2); //38/2=19K
      RTC_SetWakeUpCounter(19*32); //19*32 32ms
      RTC_ITConfig(RTC_IT_WUT, ENABLE); //开启中断
      PWR_FastWakeUpCmd(DISABLE); //关闭快速唤醒功能

      PWR_UltraLowPowerCmd(ENABLE);//超低功耗
      RTC_WakeUpCmd(ENABLE);

      while(1)

      {

      halt();

      }

    }

    中断处理程序:

    INTERRUPT_HANDLER(RTC_CSSLSE_IRQHandler,4)
    {
      /* In order to detect unexpected events during development,
      it is recommended to set a breakpoint on the following instruction.
      */

      RTC_ClearITPendingBit(RTC_IT_WUT);
    }

    将程序下载到单片机后,串到台式万用表测试电流在4ua左右,见下图:

  • 相关阅读:
    考驾照的心得
    VS2005+ACCESS WEB程序出错数据访问权限错误的解决方法
    delphi开发回忆录——面向对象的基础,继承(续)
    用人不疑,疑人不用
    delphi开发回忆录——示例源码下载
    delphi开发回忆录——面向对象的基础,继承
    delphi开发回忆录——面向对象的基础,继承(续)
    delphi开发回忆录——示例源码下载
    考驾照的心得
    Win32 API消息函数:GetMessagePos
  • 原文地址:https://www.cnblogs.com/hanhuo/p/11350667.html
Copyright © 2011-2022 走看看