stm8 停机模式与外部中断唤醒中一个小问题
做了一个简单的项目,电路板使用电池供电,需要系统在待机时低功耗。而对外接口只有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 停机模式与外部中断唤醒中一个小问题的更多相关文章
- 关于 JavaScript 中一个小细节问题 (在控制台中直接 {Name:'王尼玛',Age:20} 对象报错问题)
在 Chrome 浏览器,大家可能遇到这样一个小问题. 随便输入一个 Object 对象 ,比如 {Name:'王尼玛',Age:20} ,将会报错.之前,也从来没去考虑过到底是为啥原因. 今天,刚 ...
- 第三方开源动画库EasyAnimation中一个小bug的修复
看过iOS动画之旅的都知道,其中在最后提到一个作者写的开源动画库EasyAnimation(以下简称EA). EA对CoreAnimation中的view和layer动画做了更高层次的包装和抽象,使得 ...
- iOS7编程Cookbook中例15.8中一个小问题
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 该书的15.8例子标题为Editing Videos on a ...
- xargs命令的使用过程中一个小领悟:管道与xargs的差别
对xargs的使用总是比较模糊,大概的理解为:通道中,上一个命令的标准输出逐行作为下一个命令的参数 例如 find /var/temp* | xargs rm -r 功效:找出/var/中所有temp ...
- 亲测实验,stm32待机模式和停机模式唤醒程序的区别,以及唤醒后程序入口
这两天研究了STM32的低功耗知识,低功耗里主要研究的是STM32的待机模式和停机模式.让单片机进入的待机模式和停机模式比较容易,实验中通过设置中断口PA1来响应待机和停机模式. void EXTI1 ...
- STM32——项目需求之低功耗的停机模式
在说低功耗之前,先要明白一个东西,那就是stm32中的事件和中断. 事件是中断的触发源,开放了对应的中断屏蔽位,则事件可以触发相应的中断.在STM32中,中断与事件不是等价的,一个中断肯定对应一个事件 ...
- LPC2478的外部中断使用
LPC2478外部中断 2478的外部中断模型如下 也就是说,port0和2支持外部中断,EINT0-2是三个独立管脚的中断,而EINT3则是port0和2的所有中断共同拥有的向量 对于port0和2 ...
- STM32(3)——外部中断的使用
1 .简介 ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置.STM32目前支持的中断共84个(16个内部+68个外部),还有1 ...
- UCOSII下外部中断的实现
1.外部中断初始化函数 // EXTI initialize void EXTIX_INIT(void) { EXTI_InitTypeDef EXTI_InitStructure; //定义外部中断 ...
随机推荐
- Luogu【P3609】蹄子剪刀布(DP+滚动数组)
题目链接 (突然高兴 又一次瞬间想出转移方程并一遍A掉!!233333(虽然从二叉苹果树那题开始我就发现我的方程好像跟别人不大一样 (所以这样就可以名正言顺的水题解了 设f[i][j][k]表示考虑F ...
- BZOJ 1015: [JSOI2008]星球大战starwar【并查集】
题目可以表述成:给定一个无向图G,每次删除它的一个点和与点相关的边集,每次询问该操作后图G的连通度(连通分量的个数).和上一题一样都是考察逆向思维,虽然删除点的做法不会,但是每次加点后询问连通度却是并 ...
- Oracle Partition 分区详细总结
此文从以下几个方面来整理关于分区表的概念及操作: 1.表空间及分区表的概念 2.表分区的具体作用 3.表分区的优缺点 4.表分区的几种类型及操作 ...
- sqlserver通过设计器修改表结构保存时提示:保存到文本问题
在sqlserver通过设计器修改表结构后保存时提示:保存到文本问题,这个问题可能通过修改设置项解决 工具>选项>设计器> 在弹出的窗口是把“阻止保存要求重新创建表的更改”选项的 ...
- POJ2486 Apple Tree
Time Limit: 1000MS Memory Limit: 65536KB 64bit IO Format: %lld & %llu Description Wshxzt is ...
- C# 判断上传图片是否被PS修改过的方法
今天在网上发现一个判断图片是否被Photoshop修改过的方法.发现还不错,呵呵.摘录下来. 讲下基本的原理:其实每张被photoshop修改过的图片都会有Adobe Photoshop这样的字样在图 ...
- R语言入门视频笔记--5--自定义函数
自定义函数 你可以输出一段代码,创建一个你自己定义的函数 蛋是如果你两个自定义函数的名字重复的话,后面的会把前面的替换掉 举个栗子: hanshu1 <- function(x) sqrt(v ...
- Maven单元测试
// SKU码:系列前3位+6位年月日+3位序号(自动生产,取数据库中当天最大的,没有就赋值位001) // 订单编号:BRD+6位年月日+5位序号 // // 退单号:BRT+6位年月日+3位序号 ...
- Spring基于Setter函数的依赖注入(DI)
以下内容引用自http://wiki.jikexueyuan.com/project/spring/dependency-injection/spring-setter-based-dependenc ...
- iOS10获得系统权限
iOS 10 对系统隐私权限的管理更加严格,如果你不设置就会直接崩溃,一般解决办法都是在info.plist文件添加对应的Key-Value就可以了. <!-- 相册 --> <ke ...