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】P1122最大子树和(DFS,树上DP)
题目链接 感觉自己DP好烂啊 道道看题解 钦定1为根,DFS搜索子树权值.如果子树权值大于0就将当前节点加上子树权值,反之就把子树扔掉.最后在所有节点的权值中寻找最优解. void dfs(int ...
- BZOJ 4753 [Jsoi2016]最佳团体 ——01分数规划 树形DP
要求比值最大,当然用分数规划. 二分答案,转化为选取一个最大的联通块使得它们的和大于0 然后我们直接DP. 复杂度$O(n^2\log {n})$ #include <map> #incl ...
- LA 3263 平面划分
Little Joey invented a scrabble machine that he called Euler, after the great mathematician. In his ...
- ElasticSearch中Filter和Query的异同
如下例子,查找性别是女,所在的州是PA,过滤条件是年龄是39岁,balance大于等于10000的文档: { "query": { "bool": { &quo ...
- R语言入门视频笔记--9--随机与数据描述分析
古典概型的样本总量是一定的,且每种可能的可能性是相同的, 1.中位数:median(x) 2.百分位数:quantile(x)或者quantile(x,probe=seq(0,1,0.2)) #后面这 ...
- linux下将目录授权给其他用户的步骤
1.更改目录所有者命令:chown -R 用户名称 目录名称2.更改目录权限命令:chmod -R 755 目录名称
- Ajax向前后台传递json和转换
学生管理系统MVC模式设计心得: jquery .ajax提交data数据格式 jquery 的Ajax方法提交数据,但是是多个参数,具体data的格式如下: data提交的数据类型为:Object ...
- Android应用开发 WebView与服务器端的Js交互
最近公司再添加功能的时候,有一部分功能是用的html,在一个浏览器或webview中展示出html即可.当然在这里我们当然用webview控件喽 WebApp的好处: 在应用里嵌套web的好处有这么几 ...
- 关于linter
各类代码都有规则格式检查工具,称之为linter 比如:csslint/jslint/eslint/pylint sumlime提供了一个linter的框架SublimeLinter,在里面可以使用各 ...
- 创建git仓库及简单操作命令
1.把已有的项目代码纳入git管理 $ cd projectdir #projectdir项目代码所在的文件夹 $ git init 2.新建的项目直接使用git管理 $ cd dir #dir ...