OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7748|回复: 13

待机唤醒实验困惑之我见

[复制链接]

7

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2012-6-29
在线时间
0 小时
发表于 2012-9-8 17:03:00 | 显示全部楼层 |阅读模式
这两天搞待机唤醒的实验,困惑,通过看论坛里大虾的讲解有了点自己的理解。现在写在这里,希望原子哥补正,也希望对别人有点帮助吧。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2012-6-29
在线时间
0 小时
 楼主| 发表于 2012-9-8 17:05:03 | 显示全部楼层
首先是在tx的计时计数上面,我以为300ms应该改为30ms.

//检测WKUP脚的信号
//返回值1:连续按下3s以上
//      0:错误的触发
u8 Check_WKUP(void) 
{
u8 t=0;
u8 tx=0;//记录松开的次数
LED0=0; //亮灯DS0 
while(1)
{
if(WKUP_KD)//已经按下了
{
t++;
tx=0;
}else 
{
tx++; //超过300ms内没有WKUP信号
if(tx>3)
{
LED0=1;
return 0;//错误的按键,按下次数不够
}
}
delay_ms(30);
if(t>=100)//按下超过3秒钟
{
LED0=0;   //点亮DS0 
return 1; //按下3s以上了
}
}
}  
回复 支持 反对

使用道具 举报

7

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2012-6-29
在线时间
0 小时
 楼主| 发表于 2012-9-8 17:06:39 | 显示全部楼层
其次是程序如何一次进入工作模式,一次进入待机模式。我也是看了论坛里的帖子想明白的。

//PA0 WKUP唤醒初始化
void WKUP_Init(void)
{      
RCC->APB2ENR|=1<<2;     //先使能外设IO ORTA时钟    
RCC->APB2ENR|=1<<0;     //开启辅助时钟   
 
GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入   
GPIOA->CRL|=0X00000008;  
Ex_NVIC_Config(GPIO_A,0,RTIR);//PA0上升沿触发    
           
//(检查是否是正常开机)
/*注释:一旦有wu信号则首先复位重启,进入此处,此处通过按键时间长短决定是否进入待机模式
(注意不是因中断进入此处)。所以按键不及3s皆待机*/
/*正常工作时则靠中断进入待机模式*/    
    if(Check_WKUP()==0)Sys_Standby();    //不是开机,进入待机模式  
MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);//抢占2,子优先级2,组2
}
回复 支持 反对

使用道具 举报

7

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2012-6-29
在线时间
0 小时
 楼主| 发表于 2012-9-8 17:07:31 | 显示全部楼层
/*注释:一旦有wu信号则首先复位重启,进入此处,此处通过按键时间长短决定是否进入待机模式 
(注意不是因中断进入此处)。所以按键不及3s皆待机*/ 
/*正常工作时则靠中断进入待机模式*/
回复 支持 反对

使用道具 举报

7

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2012-6-29
在线时间
0 小时
 楼主| 发表于 2012-9-8 17:15:59 | 显示全部楼层
特别提醒:上升沿、下降沿信号!=中断信号

WU上升沿信号不是中断
回复 支持 反对

使用道具 举报

72

主题

251

帖子

0

精华

高级会员

Rank: 4

积分
597
金钱
597
注册时间
2012-3-29
在线时间
7 小时
发表于 2012-9-8 22:22:32 | 显示全部楼层
有深度
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-9-8 23:54:23 | 显示全部楼层
回复【2楼】ahamao:
---------------------------------
为什么要改为30ms?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2012-6-29
在线时间
0 小时
 楼主| 发表于 2012-9-10 09:59:33 | 显示全部楼层
 ,那就是300ms我还没能懂了。原子哥能讲一下吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-9-10 14:10:24 | 显示全部楼层
回复【8楼】ahamao:
---------------------------------
是3秒啊。
30ms*100=3000ms
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2012-9-10 14:40:02 | 显示全部楼层
说到底是 因为 WKUP是上升沿触发 唤醒,和这 按键电路 有关, 因为 接得得 3。3接开关到WKUP IO上,所以按下的时候触发的是上升沿也就是 复位了,这也是为什么说先复位,再中断了。是硬件电路决定的
1-1
回复 支持 反对

使用道具 举报

7

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2012-6-29
在线时间
0 小时
 楼主| 发表于 2012-9-11 10:15:02 | 显示全部楼层
很惭愧,原子哥我又想了好久还是不太明白啊。
我把自己的思路写下来,不知错在了哪里,希望您再指点一下。

u8 Check_WKUP(void)函数作用:长按时,状态成功转变,返回1;否则返回0。
长按时:30ms(由delay()函数产生)*100=3s.如果是待机就变为工作(初始化是转变),如果是工作就变为待机(中断函数中转变)。
短按时:状态不变。时间没达到3s,程序跳到“tx++; //超过300ms内没有WKUP信号”处,循环3次后,返回“0”——问题就在这,我认为tx的每次循环为30ms,就是返回错误是稍大于30ms*3=90ms,不是300ms。所以我以为注释里面的300ms要改成30ms。

不知道300ms是不是通过加上u8 Check_WKUP(void)函数前面执行的程序计算出的准确时间,这个时间我也不知道具体怎么算啊?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-9-11 16:14:21 | 显示全部楼层
回复【11楼】ahamao:
---------------------------------
我里面是通过30ms延时为单位的,这个不是很精确,累加100次就是3秒。这个函数很简单,按下超过3秒就返回1,没超过就返回0.返回0的时候,不做响应。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2012-6-29
在线时间
0 小时
 楼主| 发表于 2012-9-11 16:37:18 | 显示全部楼层
哦,明白了。呵呵
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2013-4-8
在线时间
0 小时
发表于 2013-5-14 08:33:17 | 显示全部楼层
这个地方我也纠结了N久了……
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-20 04:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表