OpenEdv-开源电子网

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

请教原子哥程序里唤醒是怎么实现的

[复制链接]

74

主题

293

帖子

0

精华

高级会员

Rank: 4

积分
628
金钱
628
注册时间
2014-1-8
在线时间
7 小时
发表于 2014-2-18 18:48:16 | 显示全部楼层 |阅读模式
请教原子哥,我在做待机唤醒实验的时候长按WKUP可以从待机模式唤醒,但是我对程序有点疑惑,程序里面全是进入待机模式的,并没有写关于唤醒的语句啊,到底是怎么唤醒的,求原子哥解答,多谢了!!!
这是wkup.c的文件
#include "wkup.h"
#include "led.h"
#include "delay.h"
//////////////////////////////////////////////////////////////////////////////////  
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//Mini STM32开发板
//待机唤醒 驱动代码   
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2010/6/7 
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 正点原子 2009-2019
//All rights reserved   
//////////////////////////////////////////////////////////////////////////////////  
 

//系统进入待机模式
void Sys_Enter_Standby(void)
{  
//关闭所有外设(根据实际情况写)
    RCC->APB2RSTR|=0X01FC;//复位所有IO口
Sys_Standby();//进入待机模式
}
//检测WKUP脚的信号
//返回值1:连续按下2s以上
//      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(20);
if(t>=100)//按下超过2秒钟
{
LED0=0;  //点亮DS0 
return 1; //按下2s以上了
}
}
}  
//中断,检测到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
}

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

使用道具 举报

8

主题

222

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2013-11-21
在线时间
0 小时
发表于 2014-2-18 19:15:20 | 显示全部楼层
回复【楼主位】MTFQ:
---------------------------------
外部复位,看门狗复位,WKUP,RTC闹钟,退出待机模式,  退出后效果等同于复位
回复 支持 反对

使用道具 举报

74

主题

293

帖子

0

精华

高级会员

Rank: 4

积分
628
金钱
628
注册时间
2014-1-8
在线时间
7 小时
 楼主| 发表于 2014-2-18 20:12:58 | 显示全部楼层
回复【2楼】苦竹2009:
---------------------------------
我这里是WKUP唤醒,但是我疑惑的是程序里面没有关于唤醒的代码,很奇怪,难道是WKUP按键一按下就直接唤醒了吗?如果这样的话那为什么要长按3秒才能唤醒
回复 支持 反对

使用道具 举报

8

主题

222

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2013-11-21
在线时间
0 小时
发表于 2014-2-18 20:31:03 | 显示全部楼层
回复【3楼】MTFQ:
---------------------------------
是的,一有事件触发就唤醒了。
按键时间是自己设定的
回复 支持 反对

使用道具 举报

74

主题

293

帖子

0

精华

高级会员

Rank: 4

积分
628
金钱
628
注册时间
2014-1-8
在线时间
7 小时
 楼主| 发表于 2014-2-19 10:35:14 | 显示全部楼层
回复【4楼】苦竹2009:
---------------------------------
void EXTI0_IRQHandler(void)
{                      
EXTI->R=1<<0;  //清除LINE10上的中断标志位   
if(Check_WKUP())//关机?
{   
Sys_Enter_Standby();  
}

如果过单片机正在待机,我按下按键3s则Check_WKUP()的值为1,如果这样的话是再次进入待机,而不是唤醒啊
回复 支持 反对

使用道具 举报

8

主题

222

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2013-11-21
在线时间
0 小时
发表于 2014-2-19 10:46:54 | 显示全部楼层
回复【5楼】MTFQ:
---------------------------------
待机的时候,CPU没有运行,只有WKUP唤醒
回复 支持 反对

使用道具 举报

74

主题

293

帖子

0

精华

高级会员

Rank: 4

积分
628
金钱
628
注册时间
2014-1-8
在线时间
7 小时
 楼主| 发表于 2014-2-19 10:58:26 | 显示全部楼层
回复【6楼】苦竹2009:
---------------------------------
在待机是确实是CPU没有运行(程序也不走,可以这么理解吧),但是怎么检测按下3s的?
回复 支持 反对

使用道具 举报

8

主题

222

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2013-11-21
在线时间
0 小时
发表于 2014-2-19 11:09:22 | 显示全部楼层
回复【7楼】MTFQ:
---------------------------------
你按下WKUP键以后,cpu唤醒了,然后从开始处运行,进入唤醒初始化。
然后判断是否开机,开机的话,再设置中断线0的初始化。
回复 支持 反对

使用道具 举报

74

主题

293

帖子

0

精华

高级会员

Rank: 4

积分
628
金钱
628
注册时间
2014-1-8
在线时间
7 小时
 楼主| 发表于 2014-2-19 23:44:32 | 显示全部楼层
回复【8楼】苦竹2009:
---------------------------------
那这里的判断是否开机应该就是检测是否按下3s吧,按下后cpu唤醒,检测有三秒就开机
回复 支持 反对

使用道具 举报

8

主题

222

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2013-11-21
在线时间
0 小时
发表于 2014-2-20 10:01:09 | 显示全部楼层
回复【9楼】MTFQ:
---------------------------------
回复 支持 反对

使用道具 举报

74

主题

293

帖子

0

精华

高级会员

Rank: 4

积分
628
金钱
628
注册时间
2014-1-8
在线时间
7 小时
 楼主| 发表于 2014-2-20 11:41:38 | 显示全部楼层
回复【10楼】苦竹2009:
--------------------------------
非常感谢你的帮助,真心的谢谢你!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-6 05:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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