官方资料

  可以去网络搜索中文版,或者到官方网站上去下载英文版。
  英文:

  译文:

主要内容简介

  • 影响功耗的主要因素
  • 电源系统
  • 时钟管理
  • 运行模式和低功耗模式
    • 运行模式
    • 等待模式
    • 活跃停机模式
    • 停机模式
  • 功耗与唤醒事件的测量与结果
  • 功耗管理要点

要点摘要

  停机模式(Halt):此模式下单片机的功耗最低,振荡器,CPU和外设的时钟都被关闭,主电压调压器断电。可用复位或外部中断唤醒,唤醒后之前运行的寄存器数据等都保持不变,且从HALT处继续执行程序。

停机模式下的功耗测量结果(MVR关LPVR开):

运行模式下的功耗测量结果(从RAM运行,不是从Flash开始):

停机模式下的唤醒时间测量结果:

测试程序

main.c
/*
Function:   电源管理:停机(Halt)模式测试,没有进入停机模式前,四个LED灯是每隔1秒钟亮灭一次的,超过10秒后,自动进入停机mode,然后可以通过外部中断来唤醒停机,此时程序从停机位置处继续往下运行。
Date        :   2015年7月21日
Note        :   STVD + COSMIC
Author  :   yicm
Version :   0.0.9
*/
#include<stm8s003f3p.h>/*Output Pin*/
_Bool PA3 @PA_ODR:3;
_Bool PC4 @PC_ODR:4;
_Bool PC5 @PC_ODR:5;
_Bool PC6 @PC_ODR:6;
_Bool PC7 @PC_ODR:7;
/*Input Pin*/
_Bool PC3   @PC_IDR:3;/*电量指示灯*/
#define LED1    PA3
#define LED2    PC5
#define LED3    PC6
#define LED4    PC7
/*按键指示灯*/
#define LED5    PC4
#define KEY     PC3/*主时钟频率为8Mhz*/
void Init_CLK(void)
{CLK_ICKR |= 0X01;CLK_CKDIVR = 0x08;while(!(CLK_ICKR&0x02));CLK_SWR=0xE1;
}void Init_GPIO(void)
{/*LED 配置为推挽输出*/PA_DDR |= 0X08;     //PA3PA_CR1 |= 0X08;PA_CR2 &= 0XF7;/*PC4 -KEY LED*/PC_DDR |= 0X10;PC_CR1 |= 0X10;PC_CR2 &= 0XEF;PC_DDR |= 0XE0;     //PC5/6/7PC_CR1 |= 0XE0;PC_CR2 &= 0X1F;LED1 = 1;LED2 = 1;LED3 = 1;LED4 = 1;LED5 = 1;
}void Init_TIM1(void)
{TIM1_IER = 0x00;TIM1_CR1 = 0x00;TIM1_EGR |= 0x01;TIM1_PSCRH = 199/256; // 8M系统时钟经预分频f=fck/(PSCR+1) TIM1 为16位分频器 TIM1_PSCRL = 199%256; // PSCR=0x1F3F,f=8M/(0x1F3F+1)=1000Hz,每个计数周期1msTIM1_CNTRH = 0x00;TIM1_CNTRL = 0x00;      TIM1_ARRH = 400/256;  // 自动重载寄存器ARR=0x01F4=500TIM1_ARRL = 400%256;  // 每记数500次产生一次中断,即500msTIM1_CR1 |= 0x81;TIM1_IER |= 0x01;
}/*PC3设置为上拉输入*/
void Init_EXTI2_GPIO(void)
{PC_DDR &= 0XF7; PC_CR1 &= 0XF7;PC_CR2 |= 0X08;
}/*上升沿和下降沿促发*/
void Init_EXTI2(void)
{EXTI_CR1 |= 0x30;
}main()
{_asm("sim");Init_CLK();Init_GPIO();Init_EXTI2_GPIO();Init_EXTI2();Init_TIM1();_asm("rim");while (1);
}/*外部中断唤醒*/
@far @interrupt void EXTI2_Hand_Fun(void)
{}/*定时器中断函数*/
@far @interrupt void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void)
{static unsigned int i = 0;TIM1_SR1 &=~(0x01);++i;if(0 == (i%50)){LED1 = ~LED1;LED2 = ~LED2;LED3 = ~LED3;LED4 = ~LED4;}if(i > 1000){_asm("halt");i = 0;LED5 = ~LED5;}
}
stm8_interrupt_vector.c
/*  BASIC INTERRUPT VECTOR TABLE FOR STM8 devices*  Copyright (c) 2007 STMicroelectronics*/typedef void @far (*interrupt_handler_t)(void);struct interrupt_vector {unsigned char interrupt_instruction;interrupt_handler_t interrupt_handler;
};@far @interrupt void NonHandledInterrupt (void)
{/* in order to detect unexpected events during development, it is recommended to set a breakpoint on the following instruction*/return;
}extern void _stext();     /* startup routine */
extern @far @interrupt void EXTI2_Hand_Fun(void);
extern @far @interrupt void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void);struct interrupt_vector const _vectab[] = {{0x82, (interrupt_handler_t)_stext}, /* reset */{0x82, NonHandledInterrupt}, /* trap  */{0x82, NonHandledInterrupt}, /* irq0  */{0x82, NonHandledInterrupt}, /* irq1  */{0x82, NonHandledInterrupt}, /* irq2  */{0x82, NonHandledInterrupt}, /* irq3  */{0x82, NonHandledInterrupt}, /* irq4  */{0x82, EXTI2_Hand_Fun}, /* irq5  */{0x82, NonHandledInterrupt}, /* irq6  */{0x82, NonHandledInterrupt}, /* irq7  */{0x82, NonHandledInterrupt}, /* irq8  */{0x82, NonHandledInterrupt}, /* irq9  */{0x82, NonHandledInterrupt}, /* irq10 */{0x82, TIM1_UPD_OVF_TRG_BRK_IRQHandler}, /* irq11 */{0x82, NonHandledInterrupt}, /* irq12 */{0x82, NonHandledInterrupt}, /* irq13 */{0x82, NonHandledInterrupt}, /* irq14 */{0x82, NonHandledInterrupt}, /* irq15 */{0x82, NonHandledInterrupt}, /* irq16 */{0x82, NonHandledInterrupt}, /* irq17 */{0x82, NonHandledInterrupt}, /* irq18 */{0x82, NonHandledInterrupt}, /* irq19 */{0x82, NonHandledInterrupt}, /* irq20 */{0x82, NonHandledInterrupt}, /* irq21 */{0x82, NonHandledInterrupt}, /* irq22 */{0x82, NonHandledInterrupt}, /* irq23 */{0x82, NonHandledInterrupt}, /* irq24 */{0x82, NonHandledInterrupt}, /* irq25 */{0x82, NonHandledInterrupt}, /* irq26 */{0x82, NonHandledInterrupt}, /* irq27 */{0x82, NonHandledInterrupt}, /* irq28 */{0x82, NonHandledInterrupt}, /* irq29 */
};

STM8S---电源功耗管理之停机模式(halt)实现相关推荐

  1. S32K144功耗管理与系统模式控制

    S32K144功耗管理与系统模式控制 1.引言 S32K144是一款NXP以Cortex M4为内核的32位汽车通用芯片,本文主要介绍该芯片的功耗管理与系统模式控制相关内容,如低功耗等运行模式.参考文 ...

  2. STM8单片机低功耗---活跃停机(Active Halt)模式实现-1

      前两篇文章介绍了低功耗模式中的 等待(Wait)模式和停机(Halt)模式的实现.这篇文章开始介绍 活跃停机(Active Halt)模式. STM8单片机低功耗-等待(Wait)模式实现 STM ...

  3. ESPIDF开发ESP32学习笔记【电源管理与低功耗模式】

    电源管理 ESP-IDF中集成的电源管理算法可以根据应用程序组件的需求,调整外围总线 (APB) 频率.CPU 频率,并使芯片进入 Light-sleep 模式,尽可能减少运行应用程序的功耗 应用程序 ...

  4. SylixOS电源管理之外设功耗管理

    1.前言 在这个世界中,任何系统的运转都需要能量.如树木依靠光能生长,如马儿依靠食物奔跑,如计算机系统依靠电能运行.而能量的获取是有成本的,因此如果能在保证系统运转的基础上,尽量节省对能量的消耗,就会 ...

  5. STM8单片机低功耗---活跃停机(Active Halt)模式实现-3

      在上一篇文章中使用活跃停机模式实现单片机的定时自动唤醒功能.STM8单片机低功耗-活跃停机(Active Halt)模式实现-2 通过这个实验可以看出,自动唤醒功能和定时器定时功能很类似,那么能不 ...

  6. cortex-R52 CPU的功耗管理之power gating(电源门控)

    最近在看CORTEX-R52文档时,了解了一下该处理器功耗管理相关的内容,这里记录一下power gating的部分,并加上一些自己的理解. 1.概述 power gating是一种直接关闭芯片上某一 ...

  7. STC12系列单片机的空闲模式、休眠模式(又叫掉电模式、停机模式)

    1. 空闲模式 空闲模式是指只有单片机不工作的状态.此时CPU无时钟停止工作,但是外部中断.外部低压检测电路.定时器.A/D转换.串行口等仍正常运行. 在空闲模式下,RAM.堆栈指针(SP).程序计数 ...

  8. STM32——浅谈睡眠模式、停机模式、待机模式

    若要理解低功耗,则先要说一下STM32的事件和中断 事件是中断的触发源,开放了对应的中断屏蔽位,则事件可以触发相应的中断.在STM32中,中断与事件不是等价的,一个中断肯定对应一个事件,但一个事件不一 ...

  9. Android7.0 PowerManagerService 之亮灭屏(二) PMS 电源状态管理updatePowerStateLocked()...

    本篇注意接着上篇[Android7.0 PowerManagerService 之亮灭屏(一)]继续分析量灭屏的流程,这篇主要分析PMS的状态计算和更新流程,也是PMS中最为重要和复杂的一部分电源状态 ...

最新文章

  1. p40鸿蒙系统体验,苦心等待值了!华为P40成功运行鸿蒙OS,超级流畅
  2. python执行命令并返回结果集_Python接口测试结果集实现封装比较
  3. Effective C# 原则11:选择foreach循环
  4. Linux下进程间通信概述
  5. ejb 2.0 3.0_EJB 3.1全局JNDI访问
  6. GPLT2017题目
  7. 利用Maven快速创建一个简单的spring boot 实例
  8. OpenCV3学习(5.1)——图像变换之缩放、金字塔、仿射、透射
  9. pythopn tuple(元组)
  10. 31、栈的压入、弹出序列(Python)
  11. docker容器别人访问很卡_一篇文章带你走进Docker的世界
  12. 电商峰值系统架构设计
  13. 冒泡排序算法-java实现
  14. ES查询-空字段和非空字段结果
  15. 使用MySQL存储过程给表批量造数据
  16. java开发专用英语,JAVA开发常用英语词汇
  17. MAC软件-Photoshop2015破解安装
  18. HARK学习(三)--文件格式
  19. kubernetes之容器探针(liveness and readiness probe)
  20. Python爬虫——新浪微博(网页版)

热门文章

  1. Linux工具 - htop详解
  2. php startwith endwith
  3. 塞尔达:旷野之息个人对比上古卷轴V:天际
  4. TOPSIS法中正负理想解、正负理想距离如何计算?
  5. Thymeleaf (三) ---------Thymeleaf 属性
  6. pyspider爬取免费正版图片网站Pixabay
  7. 【NOIP2017提高组正式赛】列队
  8. UESTC - 1057 秋实大哥与花 线段树
  9. 熬夜对身体造成多种的损害
  10. 45个值得收藏的 CSS 形状