做了一个简单的项目,电路板使用电池供电,需要系统在待机时低功耗。而对外接口只有4个按键,也就是唤醒必须要通过这四个按键。

  系统功能就不介绍了,只给出进入低功耗的代码和退出低功耗的代码。

  使用芯片为stm8s103

 /*****************************************************************
//进入到停机模式
*****************************************************************/
void EnterHalt()
{
int j=; /* 防止定时器中断唤醒了CPU */
TIM1_CR1 &= 0xFE; /* 用户操作计数器关掉 */ asm("sim"); /* PC3 PC4 PC5 PC6 使能外部中断 */
PC_DDR_DDR3 = ;
PC_CR1_C13 = ;
PC_CR2_C23 = ; PC_DDR_DDR4 = ;
PC_CR1_C14 = ;
PC_CR2_C24 = ; PC_DDR_DDR5 = ;
PC_CR1_C15 = ;
PC_CR2_C25 = ; PC_DDR_DDR6 = ;
PC_CR1_C16 = ;
PC_CR2_C26 = ; EXTI_CR1 = 0x00; //PC端口 低电平和下降沿都中断 for(j=;j>;j--); //延时一会 asm("rim");
asm("HALT"); /* 进入停机模式 */
}

  先关闭中断,配置IO口为外部中断,开中断,进入低功耗。

  在外部中断中,配置IO口为普通IO。

 #pragma vector = 7
__interrupt void EXTI_PORTC_IRQHandler(void)
{
ExitHalt(); //开定时器 配置Lock键为普通IO
} /****************************************************************
//退出停机模式
*****************************************************************/
void ExitHalt()
{
TIM1_CR1 |= 0x01; /* 开用户操作定时器 */ //PC3 PC4 PC5 PC6配置为普通IO口 输入 用于按键检测
PC_DDR_DDR3 = ;
PC_CR1_C13 = ;
PC_CR2_C23 = ; PC_DDR_DDR4 = ;
PC_CR1_C14 = ;
PC_CR2_C24 = ; PC_DDR_DDR5 = ;
PC_CR1_C15 = ;
PC_CR2_C25 = ; PC_DDR_DDR6 = ;
PC_CR1_C16 = ;
PC_CR2_C26 = ; EXTI_CR1 = 0x00;
}

  流程如上,实际会出现一个小问题,就是配置IO口为外部中断,开了中断以后,就立即进入了中断程序(中断条件为低电平和下降沿)。进入了中断程序后,IO口配置又将IO口配置为普通引脚,接着进入低功耗。再按按键怎么也不能唤醒了。如果你也遇到这样的问题,请参照上面的进入低功耗的代码,在配置IO口为中断引脚后,延时一会,再开中断。

  使用stm8的停机模式后,在3.0V供电的情况下,电路板整体功耗为5.6uA。使用电池供电,待机也能使用1年以上。

  

stm8 停机模式与外部中断唤醒中一个小问题的更多相关文章

  1. 关于 JavaScript 中一个小细节问题 (在控制台中直接 {Name:'王尼玛',Age:20} 对象报错问题)

    在 Chrome 浏览器,大家可能遇到这样一个小问题. 随便输入一个 Object 对象  ,比如 {Name:'王尼玛',Age:20} ,将会报错.之前,也从来没去考虑过到底是为啥原因. 今天,刚 ...

  2. 第三方开源动画库EasyAnimation中一个小bug的修复

    看过iOS动画之旅的都知道,其中在最后提到一个作者写的开源动画库EasyAnimation(以下简称EA). EA对CoreAnimation中的view和layer动画做了更高层次的包装和抽象,使得 ...

  3. iOS7编程Cookbook中例15.8中一个小问题

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 该书的15.8例子标题为Editing Videos on a ...

  4. xargs命令的使用过程中一个小领悟:管道与xargs的差别

    对xargs的使用总是比较模糊,大概的理解为:通道中,上一个命令的标准输出逐行作为下一个命令的参数 例如 find /var/temp* | xargs rm -r 功效:找出/var/中所有temp ...

  5. 亲测实验,stm32待机模式和停机模式唤醒程序的区别,以及唤醒后程序入口

    这两天研究了STM32的低功耗知识,低功耗里主要研究的是STM32的待机模式和停机模式.让单片机进入的待机模式和停机模式比较容易,实验中通过设置中断口PA1来响应待机和停机模式. void EXTI1 ...

  6. STM32——项目需求之低功耗的停机模式

    在说低功耗之前,先要明白一个东西,那就是stm32中的事件和中断. 事件是中断的触发源,开放了对应的中断屏蔽位,则事件可以触发相应的中断.在STM32中,中断与事件不是等价的,一个中断肯定对应一个事件 ...

  7. LPC2478的外部中断使用

    LPC2478外部中断 2478的外部中断模型如下 也就是说,port0和2支持外部中断,EINT0-2是三个独立管脚的中断,而EINT3则是port0和2的所有中断共同拥有的向量 对于port0和2 ...

  8. STM32(3)——外部中断的使用

    1 .简介 ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置.STM32目前支持的中断共84个(16个内部+68个外部),还有1 ...

  9. UCOSII下外部中断的实现

    1.外部中断初始化函数 // EXTI initialize void EXTIX_INIT(void) { EXTI_InitTypeDef EXTI_InitStructure; //定义外部中断 ...

随机推荐

  1. BZOJ4446 [Scoi2015]小凸玩密室 【树形Dp】

    题目 小凸和小方相约玩密室逃脱,这个密室是一棵有n个节点的完全二叉树,每个节点有一个灯泡.点亮所有灯 泡即可逃出密室.每个灯泡有个权值Ai,每条边也有个权值bi.点亮第1个灯泡不需要花费,之后每点亮4 ...

  2. 【边双连通】poj 3352 Road Construction

    http://poj.org/problem?id=3352 [题意] 给定一个连通的无向图,求最少加多少条边使得这个图变成边双连通图 [AC] //#include<bits/stdc++.h ...

  3. CSGO

    CSGO Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Problem D ...

  4. 16.1113 模拟考试T2

    测试题 #4 括号括号[问题描述]有一个长度为?的括号序列,以及?种不同的括号.序列的每个位置上是哪种括号是随机的,并且已知每个位置上出现每种左右括号的概率.求整个序列是一个合法的括号序列的概率.我们 ...

  5. Android开发之(1)AnimationListener

    1,就像Button控件有监听器一样,动画效果也有监听器,只需要实现AnimationListener就可以实现对动画效果的监听,只需要实现AnimationListener就可以实现对动画效果的监听 ...

  6. 数学知识巧学JCF(Java Collections framework)

    不知你是否还记得高中我们学过的集合,映射,函数,数学确实很牛逼,拿它来研究java集合类,轻而易举的就把知识理解了.本篇文章适合初学java集合类的小白,也适合补充知识漏缺的学习者,同时也是面试者可以 ...

  7. 洛谷—— P1051 谁拿了最多奖学金

    https://www.luogu.org/problem/show?pid=1051 题目描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖 ...

  8. SGU 乱乱开

    本解题报告 乱抄,乱写,随性随心,不喜多喷! SGU 142: 思路:一个string的字串不会超过2^20个,我们枚举出来就好了. 我出错点:数组RE #include<stdio.h> ...

  9. Java并发编程关键字synchronized的总结

    一.对synchronized的了解 synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行. ...

  10. ios Crash Log 分析汇总

    方法一: 1.xcode 有自带的symbolicatecrash,可以将.crash文件中的16进制地址转换成可读的函数地址. symbolicatecrash位于: /Applications/X ...