在低功耗应用中,一般来说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 编写如下代码:

20ms唤醒一次

主程序:

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*WakeUpTime); //19*20 20ms
  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);
}

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

stm8s和stm8l低功耗对比的更多相关文章

  1. STM8S和STM8L调试串口中断的注意点

    1. STM8L串口中断注意点 在调试PM2.5传感器GP2Y1051的时候,发现在仿真的时候开始能够进行数据的接受,但是如果暂停之后就不能接受数据,其实只是接收了一次完整的数据. 问题程序 解决方法 ...

  2. 第4章 初识STM32

    第4章     初识STM32 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege ...

  3. 第4章 初识STM32—零死角玩转STM32-F429系列

    第4章     初识STM32 集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 本章参考资 ...

  4. STM8不用手动复位进入自带Bootloader方法(串口下载)

    源:STM8不用手动复位进入自带Bootloader方法(串口下载) STM8不用手动复位进入自带Bootloader方法(串口下载)除非STM8片子的空的,如果复位运行的是自带Bootloader, ...

  5. STM8S STM8L引脚如何配置最低(转)

    源:STM8S STM8L引脚如何配置功耗最低 STM8S无任何外围电路 单片机CAP接104电容 复位接上拉电阻,其它引脚全部悬空,利用以下程序测试电流如下:(以前也用STM8L做过类似实验,情况也 ...

  6. STM8S 低功耗(1)

    STM8S的低功耗模式有4种. 关系如下. 本次使用的停机(HALT) 使用了内部定时器,外部中断,LED指示是否进入低功耗. 在while循环中设置如下 ) { if(!IR_IN) // 外部中断 ...

  7. STM8L052低功耗模式

    Stm8L系列单片机的低功耗有五种模式: § wait模式 § Lowpower run模式 § Lowpower wait模式 § Active-haltwith full RTC模式 § Halt ...

  8. STM8L外部中断 为何 死循环 寄存器操作

    STM8L 系列单片机是 ST公司推出的低功耗单片机,与STM8S系列相比功耗降低了很多,但内部结构也删减了很多,使用时一定要仔细阅读手册.  这是第一次使用STM8,实现功能不是很复杂就没想研究库函 ...

  9. Suspend to RAM和Suspend to Idle分析,以及在HiKey上性能对比

    Linux内核suspend状态 Linux内核支持多种类型的睡眠状态,通过设置不同的模块进入低功耗模式来达到省电功能.目前存在四种模式:suspend to idle.power-on standb ...

随机推荐

  1. S7-1200与S7-200 通信西门子链接

    只要这两从站的通讯格式时一样的,而且都为modbus rtu格式的话,是可以走modbus通讯.你在用主站在编程时直接调用modbus rtu通讯库.同时200做为从站,在程序里面将从站的程序写好. ...

  2. 1.为什么会有Servlet?它解决了什么问题?

    1. 为什么会出现Servlet? 因为web服务器(tomcat.Weblogic.iis.apache)没有处理动态资源请求的能力(即该请求需要计算),只能处理静态资源的请求(如果浏览器请求某个h ...

  3. Bzoj 2281 [Sdoi2011]黑白棋 题解

    2281: [Sdoi2011]黑白棋 Time Limit: 3 Sec  Memory Limit: 512 MBSubmit: 592  Solved: 362[Submit][Status][ ...

  4. CAD2014学习笔记-常用绘图命令和工具

    基于 虎课网huke88.com CAD教程 圆的绘制 快捷键c:选定圆心绘制半径长度的圆 快捷键c + 命令行输入 3p(三点成圆) 2p(两点成圆) t(选定两个圆的切点绘制与两圆相切的圆,第三部 ...

  5. 【题解】射击-C++

    Description 不难发现,豆豆能从很多事情中去思考数学,于是豆豆父母决定让他去练习射击,这是项需要集中注意力的运动,相信 能够让豆豆暂时脱离数学.学习射击的第一天就让豆豆产生 了浓厚的兴趣,射 ...

  6. C# 中异常抛出捕获机制--throw / try,catch,finally

    try { messagebox.show("true"); } catch { messagebox.show("false"); } finally { m ...

  7. golang http json http://www.alexedwards.net/blog/golang-response-snippets

    http://www.alexedwards.net/blog/golang-response-snippets https://gist.github.com/andreagrandi/97263a ...

  8. TestNG的静态方法mock的步骤

    最近团队内部对程序中使用大量的`静态方法`,而公司要求要有sonar扫描覆盖率的,因为在大量使用静态方法的地方若不mock,则覆盖率达不到.于是网上很少的文章讲解对静态方法的mock,大多都是如何使用 ...

  9. 【CYH-02】NOIp考砸后虐题赛:成绩:题解

    这道题挺送水了吧... 两种做法. 其实空间都不需要那么大,我来提交界面一看一堆MLE的,于是还是良心的放开了时限. 这么简单,就不做解释了. 下面放出几种代码. 代码: 两个数组: #include ...

  10. Kafka producer拦截器(interceptor)

    Kafka producer拦截器(interceptor) 拦截器原理 Producer拦截器(interceptor)是在Kafka 0.10版本被引入的,主要用于实现clients端的定制化控制 ...