一、简介 本文介绍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 [size=13.6364px]香瓜单片机之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文件夹中)
3)工程中添加GUA_LowPowerConsumption.c
4)添加驱动的路径
[cpp] view plain copy
注意USER文件夹是与“Project”等文件夹同级的自定义文件,用于存放香瓜写的代码。
2、应用层中调用
[cpp] view plain copy
- //******************************************************************************
- //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”。 比文档上的略高些,但已实现基本的低功耗。
因此,实验成功。
后续:有群友反馈增加“PWR_UltraLowPowerCmd(ENABLE);”可进一步降低功耗至0.3uA,待香瓜实测,先mark。
|