OpenEdv-开源电子网

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

关于待机唤醒实验中的疑惑?

[复制链接]

5

主题

9

帖子

1

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2011-8-22
在线时间
0 小时
发表于 2011-9-1 14:15:10 | 显示全部楼层 |阅读模式

 关于待机模式,我仔细的看了相关的资料!

进入待机模式后,如何退出待机模式有四种方式,在实验12中用的是WKUP上升沿来出发唤醒中断;
我想询问的是,假如当前CPU处于待机模式,那么我只用按一下那个WKUP按键,就会响应相应的唤醒中断,此时是先执行完这个中断的程序,再复位还是其他?
如果在执行唤醒中断程序,在唤醒中断程序中又进入了待机模式那么之前按下的唤醒中断相当于没有能够唤醒?
在下面的代码中,当我开机后没有按键,那么会进入待机模式,此刻下面这句话是不是相当于没有执行?( MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);//抢占2,子优先级2,组2)
那么这个没有设置EXTI0_IRQChannel优先级以及使能中断,后面怎么会通过WKUP来触发唤醒中断呢?
而当我只是按了一下WKUP按键的时候,应该会进入唤醒中断函数void EXTI0_IRQHandler(void),此时会执行这句if(Check_WKUP())//关机?
 {   
  Sys_Enter_Standby(); 
 }
但是因为Check_WKUP()返回的是0所以执行下面的那句话;
假如我只是按了一下的话,那么这个不会进入待机,这时候从中断返回后就重新复位,从main函数的第一句话开始执行么?那样的话,在执行void WKUP_Init(void)这个函数的时候又进入待机模式;
我再长按WKUP按键的时候,会进入唤醒中断,然后因为Check_WKUP()返回的是1,那么会执行  Sys_Enter_Standby();  这时候会进入待机模式啊?怎么会出现实验中的长按然后会进入正常模式呢?
根据实验来说我上面的理解肯定有误,希望有好心人能够帮忙解答下,万分感谢!
下面附上原子的代码:
void Sys_Enter_Standby(void)
{   
 //关闭所有外设(根据实际情况写)
    RCC->APB2RSTR|=0X01FC;//复位所有IO口
 Sys_Standby();//进入待机模式
}
//检测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以上了
  }
 }

//中断,检测到PA0脚的一个上升沿.  
//中断线0线上的中断检测
void EXTI0_IRQHandler(void)
{                           
 EXTI->R=1<<0;  //清除LINE10上的中断标志位   
 if(Check_WKUP())//关机?
 {   
  Sys_Enter_Standby(); 
 }
}
//PA0 WKUP唤醒初始化
void WKUP_Init(void)
{      
 RCC->APB2ENR|=1<<2;     //先使能外设IO PORTA时钟   
 RCC->APB2ENR|=1<<0;     //开启辅助时钟   
  
 GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入  
 GPIOA->CRL|=0X00000008; 
 Ex_NVIC_Config(GPIO_A,0,RTIR);//PA0上升沿触发   
                      
 //(检查是否是正常开)机      
    if(Check_WKUP()==0)Sys_Standby();    //不是开机,进入待机模式 
 MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);//抢占2,子优先级2,组2
}
int main(void)
{
 Stm32_Clock_Init(9);
 delay_init(72);
 uart_init(72,9600);
 LED_Init();
 WKUP_Init();
 while(1)
 {
  LED0=!LED0;
  delay_ms(200);
 }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

23

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2014-10-18
在线时间
1 小时
发表于 2015-1-20 22:59:22 | 显示全部楼层
待机唤醒实验终于明白了,多亏了别人的一句话,STM32的中断都是边沿触发的(我是卡在这里了),也就是说,按键按下的瞬间PA0检测到上升沿,就已经触发唤醒了。
    之所以要按下3s屏幕才亮,是因为。在待机的情况下,按下按键的程序执行顺序相当于复位,是从初始化执行的。而屏幕的初始化,要在WKUP_Init();之后,而执行WKUP_Init()时,在if语句中又进入了u8 Check_WKUP(void)。
       按下如果不到3S,就执行if(Check_WKUP()==0)后面的这句Sys_Standby();进入待机,所以这种情况时还没执行LCD_Init();就又进入了待机。也就有了没有按够3S没能唤醒的假相。把这两个初始化函数,换一下位置,开机就是按下按键瞬间屏幕就亮了
如果按够3S,则返回值为1,退出u8 Check_WKUP();这个函数,但是不会进入中断,因为这会的电平不是上升沿。接下来是执行LCD_Init(),我们就能看到唤醒的状态了。
      所以要明白这个实验,要明白以下几点:1、在待机状态下,按下按键,程序执行是从初始化开始的。2、在开机状态下,按下按键是从中断执行的(检测到上升沿)。3、只有边沿才能触发中断,虽然记得这句话,但用的时候没能想到。希望我写的够明白,如果不懂可以加qq群136271498,有很多热心的网友和大神。一个问题自己也许很长时间都想不明白,也许只需要别人提醒一句到点子上,就明白了。不用白白浪费那么多时间
回复 支持 5 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2011-9-1 14:24:10 | 显示全部楼层
回复【楼主位】sweet0429:
---------------------------------
先执行初始化复位,再进入中断程序。明白这点,上面的问题你就都明白了。
根本原因就是你搞错顺序了。

如果是正常运行,先执行中断程序。
如果是待机状态,则先复位并初始化。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 1 反对 0

使用道具 举报

5

主题

9

帖子

1

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2011-8-22
在线时间
0 小时
 楼主| 发表于 2011-9-1 14:35:23 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
嗯!非常感谢,似乎我就是这里弄晕了!听你一说,逻辑上基本就顺了!
但是还有个问题
当我开机后没有按键,那么会进入待机模式,此刻下面这句话是不是相当于没有执行?( MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);//抢占2,子优先级2,组2)
那么这个没有设置EXTI0_IRQChannel优先级以及使能中断,后面怎么会通过WKUP来触发唤醒中断呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2011-9-1 15:37:58 | 显示全部楼层
《STM32参考手册》:
退出待机模式
当一个外部复位(NRST引脚)、IWDG复位、WKUP引脚上的上升沿或RTC闹钟事件发生时,微控制器从待机模式退出。从待机唤醒后,除了电源控制/状态寄存器(PWR_CSR),所有寄存器被复位。

这里并没有说要WKUP的中断。而是WKUP的上升沿!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

9

帖子

1

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2011-8-22
在线时间
0 小时
 楼主| 发表于 2011-9-1 16:23:37 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
嗯嗯!我理解了~非常感谢啊!听君一席话,解决了很多困惑啊!
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2011-11-2
在线时间
2 小时
发表于 2011-12-10 21:17:51 | 显示全部楼层
我也被类似的问题困扰,看上面的一答一问,也明白啦,谢谢大家
时间很短,努力很长
回复 支持 反对

使用道具 举报

14

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2011-11-7
在线时间
0 小时
发表于 2012-1-12 16:27:37 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
先执行初始化复位,再进入中断程序。原子,这个初始化包括哪些啊?所有寄存器初始化、堆栈初始化等包括跳到main函数之前所有的工作吗?
http:www.infor-link.com
http://nrf51822ek-pro.taobao.com
nRF51822开发板
DA14580开发板
蓝牙4.0?BLE开发板套件
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-1-12 16:42:47 | 显示全部楼层
回复【7楼】andy_chang:
---------------------------------
就是你写的初始化代码.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2012-10-11
在线时间
0 小时
发表于 2012-11-17 16:00:50 | 显示全部楼层
回复【8楼】正点原子:
---------------------------
原子哥我看您的程序进入待机要3秒钟看明白了,为什么从待机模式到唤醒也需要3秒钟啊?不是WKUP引脚一个上升沿就可以唤醒了吗?我个人感觉按过WKUP键便可以唤醒,为啥还要等3秒钟?程序什么地方可以表现出延迟3秒钟的现象(ALIENTEK MINISTM32 实验12 待机唤醒实验)。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-11-17 16:03:00 | 显示全部楼层
特意做的这个效果。理论上是只需要WK_UP一个上升沿即可。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2012-10-11
在线时间
0 小时
发表于 2012-11-17 16:07:53 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
程序什么地方可以表现出延迟3秒钟的现象(ALIENTEK MINISTM32 实验12 待机唤醒实验)。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-11-17 16:13:36 | 显示全部楼层
回复【11楼】sunrise1990:
---------------------------------
看代码。
复位重启的时候,有检测是否3秒按下的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2012-10-11
在线时间
0 小时
发表于 2012-11-17 16:24:09 | 显示全部楼层
void WKUP_Init(void)
{      
RCC->APB2ENR|=1<<2;     //先使能外设IO PORTA时钟    
RCC->APB2ENR|=1<<0;     //开启辅助时钟   
 
GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入   
GPIOA->CRL|=0X00000008;  
Ex_NVIC_Config(GPIO_A,0,RTIR);//PA0上升沿触发    
// Ex_NVIC_Config(GPIO_A,0,FTIR);            
//(检查是否是正常开)机      
    if(Check_WKUP()==0)
// Sys_Standby();    //不是开机,进入待机模式  如果没有本句则进入运行状态和唤醒时不用等3秒钟  只要按过就可以唤醒  不知为什么
MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);//抢占2,子优先级2,组2
}
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2012-10-11
在线时间
0 小时
发表于 2012-11-17 16:59:23 | 显示全部楼层

Sys_Standby();   屏蔽与不屏蔽
u8 Check_WKUP(void) 
{
// u8 t1=0;
u8 t=0;
u8 tx=0;//记录松开的次数
LED0=0; //亮灯DS0   复位之后亮一下  其实就是这句话的效果 
/* for(t1=0;t1<10;t1++)
{
delay_ms(300);
} */
while(1)
{
if(WKUP_KD)//已经按下了
{
t++;
tx=0;
}else 
{
tx++; //超过30ms内没有WKUP信号
if(tx>3)
{
LED0=1;
return 0;//错误的按键,按下次数不够
}
// delay_ms(300);
}
delay_ms(30);//大于3000ms毫秒  
if(t>=100)//按下超过3秒钟
{
LED0=0;  //点亮DS0 
return 1; //按下3s以上了
}
LED1=!LED1;
}
}  

void WKUP_Init(void)
{    
RCC->APB2ENR|=1<<2;     //先使能外设IO PORTA时钟    
RCC->APB2ENR|=1<<0;     //开启辅助时钟  
 
GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入  
GPIOA->CRL|=0X00000008;  
Ex_NVIC_Config(GPIO_A,0,RTIR);//PA0上升沿触发   
// Ex_NVIC_Config(GPIO_A,0,FTIR);       
//(检查是否是正常开)机      
    if(Check_WKUP()==0)
Sys_Standby();    //不是开机,进入待机模式  如果没有本句则进入运行状态
MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);//抢占2,子优先级2,组2
}
原子哥不知道我这样理解对不?小弟那里说错请大侠指点。
从待机模式唤醒后的代码执行等同于复位后的执行(手册42页)。
1、正常情况下上电即进入待机模式,原因u8 Check_WKUP(void) 返回零if(Check_WKUP()==0)条件成立,
则进入如待机模式。如果唤醒意味着代码从新执行,其实按一下键已经唤醒了从头开始执行,只不过一直
在u8 Check_WKUP(void)数数数到100返回1跳过,条件不成立if(Check_WKUP()==0)不进入Sys_Standby(); 待机模式,
就不待机了那就给人感觉跑马灯闪烁唤醒了。
2、如果Sys_Standby(); 被屏蔽则上电运行LED闪烁,想待机要经过中断(WFI)经过中断要经过3秒(其实
就是在中断里面调用u8 Check_WKUP(void) 数数够三秒则待机)。唤醒其实是从新执行代码,跳过待机。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-11-17 23:11:27 | 显示全部楼层
回复【14楼】sunrise1990:
---------------------------------
正确。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2013-5-23
在线时间
5 小时
发表于 2013-5-31 15:32:04 | 显示全部楼层
顶!!!我也遇到了此类问题,哈哈。。。
回复 支持 反对

使用道具 举报

47

主题

360

帖子

0

精华

高级会员

Rank: 4

积分
726
金钱
726
注册时间
2014-3-6
在线时间
19 小时
发表于 2014-5-17 20:28:08 | 显示全部楼层
回复【15楼】正点原子:
---------------------------------
原子哥,我想问你这句:if(Check_WKUP()==0)Sys_standby();     这句是不是先执行Check_WKUP(),如果我一直按3秒,那么if这一句就要等3S才能判断?是这样吗?为什么我用的时候,一直按住,程序还是会一直往下执行,而不是停在那里3S?
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-5-18 00:22:43 | 显示全部楼层
回复【17楼】ljjdglg520:
---------------------------------
 是
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2014-5-31
在线时间
8 小时
发表于 2014-7-1 13:34:25 | 显示全部楼层
回复【14楼】sunrise1990:
---------------------------------
太感谢了,看了你的分析,我突然就明白了,谢谢了
回复 支持 反对

使用道具 举报

3

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2014-4-24
在线时间
0 小时
发表于 2014-7-2 11:23:00 | 显示全部楼层
 请问下 如果防止程序跑飞,使用IWDG,应该是个什么样的思路呢?
我的初步想法是,需要估计整个流程的执行时间,以此来设置IWDG的溢出时间,是这样的吗?请各位大哥点拨一下。。非常感谢!!!
No weapon formed against me shall prosper and every tongue that shall rise against thee in judgment thou shalt condemn。
回复 支持 反对

使用道具 举报

3

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2014-4-24
在线时间
0 小时
发表于 2014-7-2 11:24:03 | 显示全部楼层
回复【3楼】sweet0429:
---------------------------------
请问下 如果防止程序跑飞,使用IWDG,应该是个什么样的思路呢?
我的初步想法是,需要估计整个流程的执行时间,以此来设置IWDG的溢出时间,是这样的吗?请大哥点拨一下。。非常感谢!!!
No weapon formed against me shall prosper and every tongue that shall rise against thee in judgment thou shalt condemn。
回复 支持 反对

使用道具 举报

3

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2014-4-24
在线时间
0 小时
发表于 2014-7-2 11:24:29 | 显示全部楼层
回复【18楼】正点原子:
---------------------------------
请问下 如果防止程序跑飞,使用IWDG,应该是个什么样的思路呢?
我的初步想法是,需要估计整个流程的执行时间,以此来设置IWDG的溢出时间,是这样的吗?
烦请原子哥点拨一下。。非常感谢!!!
No weapon formed against me shall prosper and every tongue that shall rise against thee in judgment thou shalt condemn。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-7-2 23:53:55 | 显示全部楼层
回复【22楼】kingsun:
---------------------------------
不停的喂狗,简单点就用个定时器中断喂狗,或者用os单独开任务喂狗。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-7-29
在线时间
0 小时
发表于 2014-7-29 20:58:54 | 显示全部楼层
太棒了,,一直疑惑怎么来的3秒,,非常感谢,,努力ing
回复 支持 反对

使用道具 举报

22

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2014-4-7
在线时间
53 小时
发表于 2014-9-2 14:04:10 | 显示全部楼层
谢谢 ,明白了!!!!
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2014-10-31
在线时间
0 小时
发表于 2014-10-31 17:57:18 | 显示全部楼层
回复【23楼】正点原子:
---------------------------------
原子哥,那我要是想换其他的IO口唤醒怎办配置?比如我要用PB12口。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-10-31 23:26:02 | 显示全部楼层
回复【26楼】421181705:
---------------------------------
那就别用待机模式了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2014-10-31
在线时间
0 小时
发表于 2014-11-1 14:20:02 | 显示全部楼层
回复【27楼】正点原子:
---------------------------------


void HW_WKUP_Init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef   GPIO_InitStructure;
EXTI_InitTypeDef   EXTI_InitStructure;

  /* Enable GPIOB clock */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);

  /* Enable SYSCFG clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);


  /* Configure KEY_WEAKUP pin as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  
  /* Connect EXTI Line to KEY_WEAKUP pin */
  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource12);
  
  /* Configure EXTI line */
  EXTI_InitStructure.EXTI_Line = (uint32_t)0x00000001 << EXTI_PinSource12;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);

  /* Enable and set EXTI4_15 Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = EXTI4_15_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}



这样配置中断唤醒,为什么有下降沿不会从STOP Mode唤醒呢?stop模式唤醒后程序也是从头开始运行(等效于复位)???
回复 支持 反对

使用道具 举报

53

主题

175

帖子

1

精华

高级会员

Rank: 4

积分
516
金钱
516
注册时间
2014-5-16
在线时间
7 小时
发表于 2014-11-5 17:57:13 | 显示全部楼层
回复【27楼】正点原子:
---------------------------------
原子哥,如果我在主函数中主动待机,不配置中断,然后给wkup上升沿,是不是也能唤醒呢
本人新人,各位多包涵!
回复 支持 反对

使用道具 举报

53

主题

175

帖子

1

精华

高级会员

Rank: 4

积分
516
金钱
516
注册时间
2014-5-16
在线时间
7 小时
发表于 2014-11-5 18:05:04 | 显示全部楼层
回复【27楼】正点原子:
---------------------------------
待机之后断电,然后再上电,能正常启动吗?
本人新人,各位多包涵!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-11-5 22:50:07 | 显示全部楼层
回复【30楼】x1213378204:
---------------------------------
看你自己的程序了,再次上电相当于复位重启
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2014-10-18
在线时间
1 小时
发表于 2015-1-18 18:37:05 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
如果是待机之后,按下按键,则相当于复位,执行初始化,在初始化函数WKUP_Init()中执行Check_WKUP函数,如果按下没有超过3s返回值0,则执行Sys_Standby(),这样依然是待机状态。(因为程序运行时很快,其实这中间有唤醒状态的,对不对,只是观察不到)
     如果按下超过3s,返回1,则不执行Sys_Standby(),而是执行下面那句中断分组,执行完这句,就能进入中断状态了。因为返回值是1,则执行中断里的Sys_Enter_Standby(),这个不也是待机吗?那这样分析好像不能实现唤醒啊?
 真心不懂啊,请原子哥详细解答一下

回复 支持 反对

使用道具 举报

23

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2014-10-18
在线时间
1 小时
发表于 2015-1-18 20:59:26 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
楼主的意思跟我一样,就是长按3s执行的是这个啊Sys_Enter_Standby();,这个函数不也是待机吗?所以就不能唤醒拉?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-1-18 23:00:40 | 显示全部楼层
回复【33楼】笨笨的小马驹爱奔跑:
---------------------------------
实际情况呢?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2014-10-18
在线时间
1 小时
发表于 2015-1-19 20:07:06 | 显示全部楼层
回复【34楼】正点原子:
--------------------------
实际情况就是唤醒了?我就是想不明白,进入中断执行Sys_Enter_Standby();怎么唤醒的,明明是执行的待机啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-1-19 22:43:21 | 显示全部楼层
回复【35楼】笨笨的小马驹爱奔跑:
---------------------------------
PA0按下就会唤醒
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2015-1-19
在线时间
0 小时
发表于 2015-1-20 18:07:16 | 显示全部楼层
但是还有个问题 
当我开机后没有按键,那么会进入待机模式,此刻下面这句话是不是相当于没有执行?( MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);//抢占2,子优先级2,组2) 
那么这个没有设置EXTI0_IRQChannel优先级以及使能中断,后面怎么会通过WKUP来触发唤醒中断呢?
回复 支持 反对

使用道具 举报

23

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2014-10-18
在线时间
1 小时
发表于 2015-1-20 21:59:49 | 显示全部楼层
回复【36楼】正点原子:
---------------------------------
可能我的智商太低了,和原子哥你沟通有点困难,以后有问题还是在qq群里问吧。麻烦了
回复 支持 反对

使用道具 举报

23

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2014-10-18
在线时间
1 小时
发表于 2015-1-20 22:00:02 | 显示全部楼层
回复【37楼】cwgcjl10:
---------------------------------
我也有你这个疑问
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-1-20 22:57:44 | 显示全部楼层
回复【37楼】cwgcjl10:
---------------------------------
PA0不是靠中断唤醒的!!!!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-1-20 22:58:28 | 显示全部楼层
回复【37楼】cwgcjl10:
---------------------------------
唤醒后也不会执行中断服务函数!
而是从头开始执行.
待机唤醒时,PA0相当于一个复位按钮了....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2014-10-18
在线时间
1 小时
发表于 2015-1-20 23:00:52 | 显示全部楼层
回复【37楼】cwgcjl10:
---------------------------------
40楼有我的解答,可以参考一下
回复 支持 反对

使用道具 举报

1

主题

215

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2013-9-23
在线时间
4 小时
发表于 2015-1-21 17:43:00 | 显示全部楼层
回复【42楼】笨笨的小马驹爱奔跑:
---------------------------------
明白了,其实这个实验关键是要明白是初始化里的Check_WKUP()先执行还是中断里的Check_WKUP()先执行,即你说的1、2点和原子哥在1楼的回复,对吧。
回复 支持 反对

使用道具 举报

23

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2014-10-18
在线时间
1 小时
发表于 2015-1-24 22:02:08 | 显示全部楼层
回复【44楼】zzj:
---------------------------------
嗯 可能每个人卡住的地方不一样吧
回复 支持 反对

使用道具 举报

3

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
472
金钱
472
注册时间
2015-3-1
在线时间
123 小时
发表于 2015-4-10 12:23:47 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
就是说待机状态会复位初始化一次??
- -个性的签名
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-4-10 20:07:29 | 显示全部楼层
回复【46楼】Ray______:
---------------------------------
待机换新会重新复位。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

8

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2015-3-25
在线时间
0 小时
发表于 2015-4-15 19:18:01 | 显示全部楼层
回复【14楼】sunrise1990:
---------------------------------
正解
回复 支持 反对

使用道具 举报

25

主题

81

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2015-3-14
在线时间
5 小时
发表于 2015-7-16 11:29:42 | 显示全部楼层
回复【17楼】ljjdglg520:
---------------------------------
因为只要检测到WKUP的上升沿就进入中断了,从待机模式中退出来了。
回复 支持 反对

使用道具 举报

28

主题

303

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2014-8-14
在线时间
67 小时
发表于 2015-8-3 09:41:28 | 显示全部楼层
回复【42楼】笨笨的小马驹爱奔跑:
---------------------------------
赞一个   ----------------
这个世界上还有很多很多的人,但你不认识他们,他们也不属于你的世界。这个世界上还有很多好吃的好玩的好看的东西,可真正属于你的世界其实是很小的,只是你去过的地方吃过的东西和见过的落日,还有会在乎你死活的朋友。”——《龙族》
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-20 22:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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