STM8L之低功耗模式

发布者:太和清音最新更新时间:2018-09-10 来源: eefocus关键字:STM8L  低功耗模式 手机看文章 扫描二维码
随时随地手机看文章

一、简介

本文介绍STM8L系列如何实现:默认低功耗模式,用按键实现唤醒并发射红外信号,随即又进入低功耗模式。



二、实验平台

编译软件:IAR for STM8 1.42.2

硬件平台:stm8l101f3p6开发板

仿真器:ST-LINK

库函数版本:STM8L_STMTouch_Lib_V1.1.0




三、版权声明


博主:甜甜的大香瓜

声明:喝水不忘挖井人,转载请注明出处。

原文地址:http://blog.csdn.NET/feilusia

联系方式:897503845@qq.com

香瓜BLE之CC2541群:127442605

香瓜BLE之CC2640群:557278427

香瓜BLE之Android群:541462902

香瓜单片机之STM8/STM32群:164311667

甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i


四、基础知识

1、STM8L有几个模式?

答:

1)非低功耗模式(1个)

Run mode(运行模式)


2)低功耗模式(3个)

Wait(等待模式)、Active-halt(活跃停机模式)、Halt(停机模式)。


2、STM8L低功耗的3个模式有什么区别?

答:


简单地来说,就是:

1)wait(等待模式):时钟关闭、外设可用。通过中断、外部中断、复位,能退出本模式。

2)Active-halt(活跃停机模式):时钟关闭、外设关闭、RTC开启。通过RTC中断、外部中断、复位,能退出本模式。

3)Halt(停机模式)(功耗最低):时钟关闭、外设关闭。通过外部中断、复位,能退出本模式。


另外,上图同时说明了默认上电时是运行模式,在运行模式时可通过如下方法降低功耗:

1)降低时钟频率。

2)关闭没用的外设时钟。

3)(香瓜补充)无用的IO口配置为输出低。


3、进入低功耗模式与低功耗唤醒的流程是如何的?

答:

1)进入低功耗模式的流程

①关闭外设时钟。

②所有IO设置为输出低(注意低电平使能的得设置为输出高)。

③初始化中断口的IO。

④时钟频率降至最低(2M)。

⑤打开中断总开关。

⑥调用停机模式的函数。


2)低功耗唤醒的流程

①初始化系统时钟。

②初始化用到的外设。


五、实验前提

在进行本文步骤前,请先阅读并实现以下博文:

1、《STM8L之红外发射(PWM产生38K信号)》:http://blog.csdn.net/feilusia/article/details/53417291

2、《STM8L之定时器3的精确延时》:http://blog.csdn.net/feilusia/article/details/53407818

3、《STM8L之timer2产生PWM》:http://blog.csdn.net/feilusia/article/details/53403015

4、《STM8L之按键中断》:http://blog.csdn.net/feilusia/article/details/53372929



六、实验步骤

1、工程中添加自己写的低功耗的驱动

1)写一个驱动GUA_LowPowerConsumption.c(存放在工程的USER文件夹中)


//******************************************************************************                          

//name:             GUA_LowPowerConsumption.c             

//introduce:        低功耗驱动      

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.06     

//******************************************************************************  

#include "stm8l10x.h"

#include "GUA_LowPowerConsumption.h"

 

#include "GUA_Key.h"

#include "GUA_Key_2.h"

#include "GUA_Timer2_PWM.h"

#include "GUA_Timer3.h" 

#include "GUA_Clk.h"

/*********************宏定义************************/

#ifndef U8  

typedef unsigned char U8;  

#endif  

 

#ifndef U16  

typedef unsigned short U16;  

#endif  

 

#ifndef U32  

typedef unsigned long U32;  

#endif  

 

/*********************内部变量************************/   

static u8 sGUA_LowPowerConsumption_State = GUA_LOW_POWER_CONSUMPTION_STATE_HALT; 

 

/*********************内部函数声明************************/ 

static void GUA_LowPowerConsumption_Halt_Peripheral(void);

static void GUA_LowPowerConsumption_Halt_GPIO_Default(void);

static void GUA_LowPowerConsumption_Halt_GPIO_Interrupt(void);

static void GUA_LowPowerConsumption_Halt_InterruptSwitchOn(void);

static void GUA_LowPowerConsumption_Halt_Enable(void);

 

static void GUA_LowPowerConsumption_Active_Clk(void);

static void GUA_LowPowerConsumption_Active_Peripheral(void);

 

//******************************************************************************              

//name:             GUA_LowPowerConsumption_Halt_PeripheralCLK             

//introduce:        关闭外设时钟          

//parameter:        none    

//return:           none           

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.06                    

//******************************************************************************  

static void GUA_LowPowerConsumption_Halt_Peripheral(void)

{

  //时钟失能

  CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, DISABLE);

  CLK_PeripheralClockConfig(CLK_Peripheral_TIM3, DISABLE);

  CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, DISABLE);

  CLK_PeripheralClockConfig(CLK_Peripheral_I2C, DISABLE);

  CLK_PeripheralClockConfig(CLK_Peripheral_SPI, DISABLE);

  CLK_PeripheralClockConfig(CLK_Peripheral_USART, DISABLE);

  CLK_PeripheralClockConfig(CLK_Peripheral_AWU, DISABLE);

}

 

//******************************************************************************              

//name:             GUA_LowPowerConsumption_Halt_GPIO_Default             

//introduce:        所有IO口设置为输出低(注意低电平使能的得设置为输出高)          

//parameter:        none    

//return:           none           

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.06                    

//******************************************************************************  

static void GUA_LowPowerConsumption_Halt_GPIO_Default(void)

{

  //IO配置为输出

  GPIO_Init(GPIOA, GPIO_Pin_2 | GPIO_Pin_3, GPIO_Mode_Out_PP_High_Fast); 

  GPIO_Init(GPIOB, GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 |GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7, GPIO_Mode_Out_PP_High_Fast); 

  GPIO_Init(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4, GPIO_Mode_Out_PP_High_Fast); 

 

  //IO配置为输出低(注意低电平使能的得设置为输出高)

  GPIO_WriteBit(GPIOA, GPIO_Pin_2 | GPIO_Pin_3, RESET);

  GPIO_WriteBit(GPIOB, GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 |GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7, RESET);  

  GPIO_WriteBit(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4, RESET);  

}

 

//******************************************************************************              

//name:             GUA_LowPowerConsumption_Halt_GPIO_Interrupt             

//introduce:        初始化中断口的IO          

//parameter:        none    

//return:           none           

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.06                    

//******************************************************************************  

static void GUA_LowPowerConsumption_Halt_GPIO_Interrupt(void)

{

  //按键初始化

  GUA_Key_Init();

 

  //按键2初始化

  GUA_Key_2_Init();

}

 

//******************************************************************************              

//name:             GUA_LowPowerConsumption_Halt_Clk             

//introduce:        时钟配置为2M          

//parameter:        none    

//return:           none           

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.06                    

//******************************************************************************  

static void GUA_LowPowerConsumption_Halt_Clk(void)

{

  //寄存器重置 

  CLK_DeInit();              

  

  //时钟8分频,2MHz

  CLK_MasterPrescalerConfig(CLK_MasterPrescaler_HSIDiv8);       

}

 

//******************************************************************************              

//name:             GUA_LowPowerConsumption_Halt_InterruptSwitchOn             

//introduce:        打开中断总开关          

//parameter:        none    

//return:           none           

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.06                    

//******************************************************************************  

static void GUA_LowPowerConsumption_Halt_InterruptSwitchOn(void)

{

  //开全局中断 

  asm("rim"); 

}

 

//******************************************************************************              

//name:             GUA_LowPowerConsumption_Halt_Enable             

//introduce:        进入停机模式          

//parameter:        none    

//return:           none           

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.06                    

//******************************************************************************  

static void GUA_LowPowerConsumption_Halt_Enable(void)

{

  //进入停机模式

  halt();

}

 

//******************************************************************************              

//name:             GUA_LowPowerConsumption_Active_Clk             

//introduce:        初始化时钟        

//parameter:        none    

//return:           none           

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.06                    

//******************************************************************************  

static void GUA_LowPowerConsumption_Active_Clk(void)

{

  //晶振初始化

  GUA_CLK_Init();

}

 

//******************************************************************************              

//name:             GUA_LowPowerConsumption_Active_Peripheral             

//introduce:        初始化外设         

//parameter:        none    

//return:           none           

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.06                    

//******************************************************************************  

static void GUA_LowPowerConsumption_Active_Peripheral(void)

{

  //定时器2的PWM初始化

  GUA_Timer2_PWM_Init();  

 

  //定时器3的初始化

  GUA_Timer3_Init(); 

}

 

//******************************************************************************              

//name:             GUA_LowPowerConsumption_Get             

//introduce:        低功耗读取状态函数          

//parameter:        none    

//return:           GUA_LOW_POWER_CONSUMPTION_STATE_ENABLE or GUA_LOW_POWER_CONSUMPTION_STATE_DISABLE           

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.06                    

//******************************************************************************  

U8 GUA_LowPowerConsumption_Get(void)

{

   return sGUA_LowPowerConsumption_State;

}

 

//******************************************************************************              

//name:             GUA_LowPowerConsumption_Set             

//introduce:        低功耗设置状态函数          

//parameter:        nGUA_LowPowerConsumption_State: GUA_LOW_POWER_CONSUMPTION_STATE_ENABLE or GUA_LOW_POWER_CONSUMPTION_STATE_DISABLE    

//return:           none           

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.06                    

//******************************************************************************  

void GUA_LowPowerConsumption_Set(U8 nGUA_LowPowerConsumption_State)

{

   sGUA_LowPowerConsumption_State = nGUA_LowPowerConsumption_State;

}

 

//******************************************************************************              

//name:             GUA_LowPowerConsumption_Cmd             

//introduce:        低功耗控制函数          

//parameter:        nGUA_LowPowerConsumption_State: GUA_LOW_POWER_CONSUMPTION_STATE_ENABLE or GUA_LOW_POWER_CONSUMPTION_STATE_DISABLE    

//return:           none           

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.06                    

//******************************************************************************  

void GUA_LowPowerConsumption_Cmd(U8 nGUA_LowPowerConsumption_State)

{

  //开启低功耗

  if(nGUA_LowPowerConsumption_State == GUA_LOW_POWER_CONSUMPTION_STATE_HALT)

  {

    //关闭外设时钟

    GUA_LowPowerConsumption_Halt_Peripheral();

    

    //所有IO口设置为输出低(注意低电平使能的得设置为输出高)

    GUA_LowPowerConsumption_Halt_GPIO_Default();

    

    //初始化中断口的IO

    GUA_LowPowerConsumption_Halt_GPIO_Interrupt();

    

    //时钟配置为2M

    GUA_LowPowerConsumption_Halt_Clk();

    

    //打开中断总开关

    GUA_LowPowerConsumption_Halt_InterruptSwitchOn();    

    

    //置位标志位

    GUA_LowPowerConsumption_Set(GUA_LOW_POWER_CONSUMPTION_STATE_HALT); 

    

    //进入停机模式

    GUA_LowPowerConsumption_Halt_Enable();   

    

/*******************************************************************/

    

    //初始化时钟

    GUA_LowPowerConsumption_Active_Clk();

    

    //初始化外设

    GUA_LowPowerConsumption_Active_Peripheral();

    

    //置位标志位

    GUA_LowPowerConsumption_Set(GUA_LOW_POWER_CONSUMPTION_STATE_ACTIVE);  

  }

  //关闭低功耗

  else

  {

 

  }  

}


2)写一个驱动头文件GUA_LowPowerConsumption.h(存放在工程的USER文件夹中)


//******************************************************************************                          

//name:             GUA_LowPowerConsumption.h             

//introduce:        低功耗驱动的头文件      

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.06    

//******************************************************************************  

#ifndef _GUA_LOW_POWER_CONSUMPTION_H_ 

#define _GUA_LOW_POWER_CONSUMPTION_H_

 

/*********************宏定义************************/

//低功耗控制宏

#define GUA_LOW_POWER_CONSUMPTION_STATE_HALT            0

#define GUA_LOW_POWER_CONSUMPTION_STATE_ACTIVE          1

 

/*********************外部函数声明************************/  

unsigned char GUA_LowPowerConsumption_Get(void);

void GUA_LowPowerConsumption_Set(unsigned char nGUA_LowPowerConsumption_State);

void GUA_LowPowerConsumption_Cmd(unsigned char nGUA_LowPowerConsumption_State);

 

#endif


3)工程中添加GUA_LowPowerConsumption.c

4)添加驱动的路径



$PROJ_DIR$\..\USER  

注意USER文件夹是与“Project”等文件夹同级的自定义文件,用于存放香瓜写的代码。



2、应用层中调用


1)main.c


//******************************************************************************                          

//name:             main.c             

//introduce:        主函数      

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.06     

//******************************************************************************  

#include "stm8l10x.h"

#include "main.h"

#include "GUA_Key.h"

#include "GUA_Key_2.h"

#include "GUA_Timer2_PWM.h"

#include "GUA_Infrared_Send.h"

#include "GUA_Timer3.h" 

#include "GUA_Clk.h"

#include "GUA_LowPowerConsumption.h"

 

/*********************宏定义************************/

#ifndef U8  

typedef unsigned char U8;  

#endif  

  

#ifndef U16  

typedef unsigned short U16;  

#endif  

 

#ifndef U32  

typedef unsigned long U32;  

#endif  

 

#ifndef int32  

typedef signed long int32;  

#endif 

/*********************外部变量************************/ 

U8 gGUA_Function = 0;                                //功能码

 

/*********************内部函数声明************************/ 

static void GUA_Init(void);

//******************************************************************************              

//name:             GUA_TEST             

//introduce:        测试          

//parameter:        none    

//return:           none           

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.06                       

//******************************************************************************  

static void GUA_TEST(void)

{  

 

}

 

 

//******************************************************************************              

//name:             GUA_Init             

//introduce:        初始化          

//parameter:        none    

//return:           none           

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.06                      

//******************************************************************************  

static void GUA_Init(void)

{

  //关全局中断  

  asm("sim");                         

  

  //晶振初始化

  GUA_CLK_Init();

 

  //按键初始化

  GUA_Key_Init();

 

  //按键2初始化

  GUA_Key_2_Init();

 

  //定时器2的PWM初始化

  GUA_Timer2_PWM_Init();  

 

  //定时器3的初始化

  GUA_Timer3_Init(); 

  

  //开全局中断 

  asm("rim");  

}

 

//******************************************************************************              

//name:             main             

//introduce:        主函数          

//parameter:        none    

//return:           none           

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.06                       

//******************************************************************************  

void main(void)

{

  //初始化

  //GUA_Init();  

  

  //测试

  //GUA_TEST();

  

  while(1)

  {

      switch(gGUA_Function)

      {

          //空闲

          case FUNC_IDLE_EVENT: 

          {           

              //低功耗模式

              if(GUA_LowPowerConsumption_Get() == GUA_LOW_POWER_CONSUMPTION_STATE_HALT)

              {

                GUA_LowPowerConsumption_Cmd(GUA_LOW_POWER_CONSUMPTION_STATE_HALT);

              }

              //正常模式

              else

              {

                GUA_LowPowerConsumption_Cmd(GUA_LOW_POWER_CONSUMPTION_STATE_ACTIVE);              

              }

              

              break;          

          }

          

          //短按键处理

          case FUNC_GUA_KEY_SHORT_EVENT: 

          {

              //发送红外键值

              GUA_Infrared_Send(0x00FF00FF);           

 

              //置位低功耗标志位

              GUA_LowPowerConsumption_Set(GUA_LOW_POWER_CONSUMPTION_STATE_HALT); 

              

              //返回空闲状态

              gGUA_Function = FUNC_IDLE_EVENT;  

              break;               

          }       

 

          

          //短按键2处理

          case FUNC_GUA_KEY2_SHORT_EVENT: 

          {

              //发送红外键值

              GUA_Infrared_Send(0x00FF02FD);            

 

              //置位低功耗标志位

              GUA_LowPowerConsumption_Set(GUA_LOW_POWER_CONSUMPTION_STATE_HALT); 

              

              //返回空闲状态

              gGUA_Function = FUNC_IDLE_EVENT;  

              break;               

          }       

  

          //其他

          default: 

          {

              //返回空闲状态

              gGUA_Function = FUNC_IDLE_EVENT;                                     

              break;           

          }                     

      }                 

  }

}


2)main.h


//******************************************************************************                          

//name:             main.h             

//introduce:        主函数的头文件      

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2016.12.06      

//******************************************************************************  

#ifndef _MAIN_H_

#define _MAIN_H_

 

/*********************宏定义************************/   

//主轮询的宏

#define FUNC_IDLE_EVENT                                 0x00    //空闲

#define FUNC_GUA_KEY_SHORT_EVENT                        0x10    //短按键处理事件

#define FUNC_GUA_KEY_LONG_EVENT                         0x11    //长按键处理事件

#define FUNC_GUA_KEY2_SHORT_EVENT                       0x12    //短按键2处理事件

#define FUNC_GUA_KEY2_LONG_EVENT                        0x13    //长按键2处理事件

/*********************外部变量************************/

extern u8 gGUA_Function;                                        //功能码

 

 

#endif


七、实验结果


将万用表的电流档串入VCC的跳线中,待机时为1uA~2uA之间跳变。


当按下按键发射红外时,电流值瞬间为1mA~2mA,随后又降低至待机状态。




对比datasheet的数据:“Halt: 0.3 µA、Active-halt: 0.8 µA、Dynamic Run:150 µA/MHz”。


比文档上的略高些,但已实现基本的低功耗。




因此,实验成功。


关键字:STM8L  低功耗模式 引用地址:STM8L之低功耗模式

上一篇:STM8L101+si4463低功耗和自动唤醒配置
下一篇:STM8L低功耗设置

推荐阅读最新更新时间:2024-03-16 16:13

STM8L RTC总结(1)
介绍 电池在满足MCU最小供电状态下,无论MCU是运行、低功耗或重启状态,RTC一直处于工作状态。 主要特性如下: 日历功能 周期唤醒 事件触发 脉冲输出 时钟源 RTC时钟源可选HSE,LSE,HSI或LSI。 为确保RTC精确工作,要求系统时钟(SYSCLK)必须等于或大于4*RTCCLK值。如果系统时钟(SYSCLK)为LSE或LSI,则RTC时钟必须等于系统时钟(SYSCLK),并且禁用RTC同步机制(置位RTC_CR1寄存器RATIO位)。 配置RTC时钟源 配置RTC时钟源为LSE,1分频,即32768Hz。 1. 等待CLK_CRTCR:RTCSWBSY位复位,然后设置CLK_CRTCR值为0x1
[单片机]
STM8L库函数修正--GPIO_ReadInputDataBit
使用的库:STM8L15x_StdPeriph_Driver 库函数:GPIO_ReadInputDataBit 函数原型: BitStatus GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin) { return ((BitStatus)(GPIOx- IDR & (uint8_t)GPIO_Pin)); } 作用:读取GPIO脚的电平,被读取的IO口为低电平时返回RESET,高电平返回SET。 SET\RESET的定义: typedef enum {RESET = 0, SET = !RESET} B
[单片机]
STM8L之自定义长短按键
简介 本文介绍STM8L系列如何自定义一个长短按键。 实验平台 编译软件:IAR for STM8 1.42.2 硬件平台:stm8l101f3p6开发板 仿真器:ST-LINK 库函数版本:STM8L_STMTouch_Lib_V1.1.0 六、硬件原理图 本文使用PB2作为按键引脚,PB2配置为内部上拉输入,当KEY1按键按下时,PB2被拉低。 实验步骤 1、工程中添加长短按键的驱动 1)写一个长短按键的驱动GUA_Key.c (存放在工程的USER文件夹中) //**********************************************************
[单片机]
<font color='red'>STM8L</font>之自定义长短按键
STM8L pk MSP430 低功耗优势对比
我的测试环境如下: 1、外部晶振分频得1M 2、一个16位定时器 3、一个按键中断 4、一个串口 波特率:115200 5、一个LED灯 6、电源3.3V 7、主程序运行:按键中断从串口打印“STM8L PK MSP430”,定时器500MS中断将LED取反。 以上硬件条件分别在STM8L和MSP430上全速进行。实测电流进行比较而得结果,有兴趣的朋友可以试试看看。 讨论说明: 低功耗一直是各大MCU厂商争夺的焦点。最近,网上非常流行一个视频(意法半导体STM8L低能耗系列MCU技术演示),视频中ST的工程师分别用两个土豆,RFID线圈,一杯热水对STM8L MCU进行供电并使得系统正常运行。这不禁让我对STM8的运行功耗产
[单片机]
<font color='red'>STM8L</font> pk MSP430 <font color='red'>低功耗</font>优势对比
STM8L低功耗设置
最近搞一个低功耗的项目,用到STM8L的芯片。低功耗这玩意儿,MCU是一部分,硬件也是需要仔细考虑的。 所谓低功耗产品,一般来讲就是在大多数时间让MCU进入睡眠模式,在有数据更新时唤醒,将数据显示或者发送上报。对于中断类型的,可以采用中断直接唤醒MCU的方式,而对于温湿度之类的传感器,只能采用定时唤醒,然后采样并比较判断当前的值是否发送变化,然后显示或者上报。 如果使用了显示屏,WiFi、蓝牙等模块,则需要在睡眠时将其断电。硬件上需要升压电路,否则有些外设在低电压时驱不起来。 STM8L本身在halt模式下消耗电流为350nA,在active-halt with RTC模式下为1.3uA。 最先的版本测试电流达到了1mA以上,草,
[单片机]
STM8L RTC总结初始化和配置
配置RTC时钟源 配置RTC时钟源为LSE,1分频,即32768Hz。 等待CLK_CRTCR:RTCSWBSY位复位,然后设置CLK_CRTCR值为0x10; 等待CLK_ECKCR:LSERDY位置位,标识LSE时钟源已稳定可用; 等待CLK_ECKCR:LSEON位置位,标识LSE时钟源已启用。 解除RTC 寄存器 保护 执行以下操作顺序: 写0xCA到寄存器RTC_WPR; 写0x53到寄存器RTC_WPR。 写其它值到RTC_WPR,则自动激活RTC寄存器保护功能。 配置日历功能 配置步骤如下: 进入初始化模式,置位RTC_ISR中INIT位;并等待初始化标志位(INITF)置位; 配置ck_spre时
[单片机]
STM32开发笔记26:STM32L0低功耗设计——Stop模式下的真实功耗
单片机型号:STM32L053R8T6 在12V输入端测量电流时,电流变化比较大,不能确认语句执行的有效性,所以在3.3V稳压前端接入电流表,以测量真实电流功耗。 main函数中的程序,如下,程序一执行就进入Stop模式。 int main(void) { Target.EnterStopMode(); while(1) { } } EnterStopMode函数里面做的事情,也很简单,如下: void CTarget::EnterStopMode(void) { HAL_PWREx_EnableUltraLowPower(); HAL_PWREx_EnableFastWakeUp();
[单片机]
STM32L0低功耗设计3: Stop模式下的真实功耗
在12V输入端测量电流时,电流变化比较大,不能确认语句执行的有效性,所以在3.3V稳压前端接入电流表,以测量真实电流功耗。 main函数中的程序,如下,程序一执行就进入Stop模式。 int main(void){ Target.EnterStopMode(); while(1) { }} EnterStopMode函数里面做的事情,也很简单,如下: void CTarget::EnterStopMode(void){HAL_PWREx_EnableUltraLowPower();HAL_PWREx_EnableFastWakeUp();__HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

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