历史上的今天

今天是:2024年11月13日(星期三)

2019年11月13日 | STM8S的HALT模式与AWU唤醒

发布者:快乐舞蹈 来源: eefocus关键字:STM8S  HALT模式  AWU唤醒 手机看文章 扫描二维码
随时随地手机看文章

/*

**********************************************************************************************************************************

* Name    : STM8S的HALT模式与AWU唤醒

* Author  : MingMing

* Release : 2014/1/2

* Update  : 2014/1/2

* E-mail  : clint.wang@foxmail.com

**********************************************************************************************************************************

*/

HALT模式

    为了降低功耗,STM8ST提供了三种低功耗模式:分别是等待模式(执行WFI指令)、停机模式(执行HALT命令)和活跃停机模式(先使能AWU再执行HALT命令)。处于等待模式时外设和中断管理器还在运行,并不是最低功耗,只要有中断的产生,芯片就会被唤醒。处于停机模式下时,外设等都被关闭,芯片处于最低的功耗,只有外部中断和外中断才能将其唤醒。处于活跃停机模式时,相比停机模式而言,AWU和IWDG处于激活状态,芯片也可以由AWU唤醒。

    在IAR的intrinsics.h文件中定义STM8S的命令如下:


__intrinsic void__enable_interrupt(void);     /* RIM */

__intrinsic void __disable_interrupt(void);   /* SIM */

__intrinsic void __no_operation(void);        /* NOP */

__intrinsic void __halt(void);                /* HALT */

__intrinsic void__wait_for_interrupt(void);   /* WFI */

    在其它的开发环境环境可能存在差异,那么可以使用下面的定义:


#define   __halt()    asm("halt")

#define   __nop()     asm("nop")

#define   __rim()     asm("rim)

#define   __sim()     asm("sim")

#define   __sim()     asm("wfi")

    将HALT命令添加到主函数中:


int main(void)

{

  INT8U  mainLoop = 1;                        /* 主循环执行调节 */

  LED_Init();                                 /* 初始化LED的管脚 */

  __enable_interrupt();                       /* 开总中断 */

  __halt();                                   /* 停机命令*/

  while(mainLoop)

  { 

    LED_TurnOn();                             /* 如果芯片已进入停机模式,LED不亮 */

  }

  return 0;

}

AWU唤醒

    根据上面的操作,可以让STM8S进入停机模式,接下来我们考虑如何将它从停机模式唤醒。我们有两种方法:一种是采用外部中断和外设中断,另一种是将停机模式过渡到活跃停机模式,然后采用AWU唤醒机制。AWU的代码如下:



/**************************************** stm8s_awu.c ******************************************/

void AWU_Init(void)

{

  AWU_CSR1 |= MASK_AWU_CSR1_AWUF;             /* AWU自动唤醒中断标志位被使能 */

  AWU_CSR1 &=~MASK_AWU_CSR1_AWUEN;            /* 自动唤醒功能被禁止 */

  AWU_CSR1 &=~MASK_AWU_CSR1_MSR;              /* 测量被禁止 */  

  AWU_APR = 0x3E;                             /* 时钟为LSI的64分频 */

  AWU_TBR = 0x0B;                             /* 时基选择,512ms唤醒一次 */

  CLK_PCKENR2 |= (0x04);                      /* AWU与主时钟连接 */   

  CLK_ICKR |= MASK_CLK_ICKR_LSIEN;            /* 打开内部低速时钟源 */  

  while(CLK_ICKR_LSIRDY == 0);                /* 等待时钟源信号稳定 */  

}

void AWU_Enable(void)

{

  AWU_CSR1 |= MASK_AWU_CSR1_AWUEN;            /* 自动唤醒功能被使能 */ 

}

void AWU_Disenable(void)

{

  AWU_CSR1 &=~MASK_AWU_CSR1_AWUEN;            /* 自动唤醒功能被禁止 */  

}

#pragma vector = AWU_vector 

__interrupt void AWU_ISR(void)

{

  AWU_CSR1 = AWU_CSR1;                        /* 清除更新中断标志位 */           

}

/*******************************************  end **********************************************/

    写好AWU的代码后,在主函数中加入调用如下:

int main(void)

{

  INT8U  mainLoop = 1;                        /* 主循环执行调节 */

  LED_Init();                                 /* 初始化LED的管脚 */

  AWU_Init();                                 /* AWU初始化 */

  __enable_interrupt();                       /* 开总中断 */

  AWU_Enable();                               /* AWU使能 */

  __halt();                                   /* 进入活跃停机模式,LED不亮*/

  while(mainLoop)

  {

    LED_TurnOn();                             /* 被唤醒后,LED亮 */

    Delay(50000); 

    LED_TurnOff();                            /* LED亮一段时间后关闭 */

    __halt();                                 /* 再次进入活跃停机模式,等待唤醒 */

  }

  return 0;

}

关键字:STM8S  HALT模式  AWU唤醒 引用地址:STM8S的HALT模式与AWU唤醒

上一篇:STM8L低功耗HALT模式一些总结
下一篇:STM8L051F3_01_GPIO应用

推荐阅读

1、学界|医疗机器人:澳洲在医疗机器人方面取得新突破伊拉瓦拉医学研究所已经安装了一个机器人,该机器人可以在治疗慢性疼痛,癫痫和痴呆等具有挑战性的疾病方面取得重大突破。这台价值90万美元的机器人将被安置在伊拉瓦拉健康与医学研究所(IHMRI)的新电生理学实验室。澳大利亚首席科学家Alan Finkel博士于周五早上正式开放该设施,并借此机会近距离观...
利用stm32单片机的休眠模式,使单片机间歇的休眠从而实现低功耗的目的。往往会出现进入休眠后无法唤醒,导致下一次程序烧不进去。通常的解决办法是:一般的开发板或单片机最小系统都会有复位键,按住复位键,点下载,然后松开复位键即可。我遇到的问题是:误入了stm32(STM32L051C6T6)的STOP模式,又没有写入相应的唤醒方法,导致后续的程序不能下载。使...
当地时间11月9日,瑞典电视台报道,斯德哥尔摩行政法院9日出台临时禁令,叫停瑞典邮政和电信管理局(PTS)10月20日在5G频谱拍卖中限制华为的附加条款。行政法院称,由于此决定给华为权益带来影响,华为有权对该决定提出上诉。行政法院进一步指出,因目前案件结果不明朗,决定颁发临时禁令,暂停适用频谱拍卖决定中有关华为的部分。之前华为在回应中表示,...
11月12日,华天科技发布公告称,全资子公司华天投资与浦口产业投资签署《股东出资协议》,双方拟合计认缴出资 9.5 亿元,在南京市浦口区设立由公司控股的华天科技(江苏)有限公司(下称:华天江苏)。据悉,华天江苏从事晶圆级先进封装测试业务,其中,华天投资拟以现金和专利及非专利技术认缴出资 5.7 亿元,占华天江苏注册资本的 60%。公告显示,...

史海拾趣

问答坊 | AI 解惑

键盘设计参考资料

本帖最后由 paulhyde 于 2014-9-15 09:03 编辑 键盘设计参考资料  …

查看全部问答∨

【社区大讲堂】微波单片集成电路-PA

应美女版主邀请,重出江湖,呈上拙作一篇。继续上次的话题微波单片集成电路简介,这次谈一谈MMIC PA 的设计。       PA作为通信系统中关键的的元器件,向来都是模拟工程师必争之地。MMIC PA之所以被如此重视一方面是因为它是T ...…

查看全部问答∨

想学好单片机编程我该学什么?

我现在的项目是单片机的,而我以前都没学过任何有关单片机的知识,现在边学边做,我想请教下大家,我想把单片机学好,我该学习些什么,我觉得硬件方面暂时不想学,我想深入点学习,有哪些方面的书是必看的呢?有什么好书推荐没?…

查看全部问答∨

关于makefile的一个问题

当依赖关系中没有指明依赖文件时,make工具如何决定是否执行依赖关系中的命令? 比如: all:makedir makedir: mkdir out 当make工具检查目标文件makedir的依赖关系时,发现此依赖关系中没有指时依赖文件.那么make工具到底是继续,还是报错? …

查看全部问答∨

Createfile,readfile,writefile,还有deviceiocontrol中的缓冲区到底是什么意思啊?

驱动开发时,我看了很多遍,还是不明白。其实以前文件操作时也用过,就是写文件,读文件。但是用于驱动时我就搞不明白了,这些缓冲和驱动缓冲有什么关系?如:USB驱动中,这些缓冲和端点缓冲是什么关系,这些缓冲起什么作用? 谢谢高人们啊!!!…

查看全部问答∨

CAB安装问题

安装CAB之后,如何在系统的“删除程序”中看不到所安装的软件。…

查看全部问答∨

第三轮示波器DIY,我可以为大家争取器件

几天前,当SOSO告诉我有童鞋想继续我们的示波器DIY,并已捐款时,我真的很感动,这是真正的热爱者。其实在第一次DIY示波器时,当时有技术问题大家解决不了,我曾请某厂商的相关人员帮忙回答,他的确回答了,但事后在某场合表示了对活动的轻视。这事 ...…

查看全部问答∨

关于CMD 的求助 interrupt void ILLEGAL_ISR(void) 这个中断...

朋友们,诚恳求助: 程序本来 一开始就跑 interrupt void ILLEGAL_ISR(void)  这个中断...但我把一个360个点的数组删了 不用了,它就不跑了...  但我需要那个数组...我应该怎么解决  & ...…

查看全部问答∨

圆点博士小四轴飞行器高清套图欣赏

圆点博士小四轴飞行器高清套图欣赏:…

查看全部问答∨

新唐w78E516D 写入程序后,需要P4.3接地或电源后,程序才能正常启动

两片新唐W78E516D芯片,开始都能通过ISP方式正常写入和执行程序, 后来在某次通过ISP写入程序后,不关机或复位(复位按钮),程序能正常运行, 冷启动或复位后,程序无法启动运行,一块需要P4.3接地一下才能正常运行,一块需要P4.3接VDD一下程序 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved