OpenEdv-开源电子网

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

关于待机模式实验疑问!!!!

[复制链接]

8

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2013-7-21
在线时间
0 小时
发表于 2013-7-27 19:46:47 | 显示全部楼层 |阅读模式
void WKUP_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;    
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD;//下拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
    //使用外部中断方式
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
    EXTI_InitStructure.EXTI_Line = EXTI_Line0; //设置按键所有的外部线路
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //设外外部中断模式:EXTI线路为中断请求
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发 
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //使能按键所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占优先级2级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //从优先级2级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
        A1:->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 这里是重点!!!!!!!!!
        A2:if(Check_WKUP()==0) Sys_Standby();    //不是开机,进入待机模式  
}
中断服务
void EXTI0_IRQHandler(void)
{                
EXTI->R=1<<0;  //清除LINE10上的中断标志位  
if(Check_WKUP())//关机?
{  
Sys_Enter_Standby(); //进入待机模 
}


实验一开始就进入到待机模式 这个可以理解

但是后面唤醒功能的理解不能确定是不是正确的!!!!麻烦原子哥确认一下

1:按下唤醒键->程序从头开始跑,跑到配置完外部NVIC中断,这里不会进入中断,因为按键是上升沿触发,而按键一开是复位的时候就是高电平了,然后按超过3S
 A2:if(Check_WKUP()==0) Sys_Standby(); 返回为1,条件不成立不进入待机模式  程序正常运行。

2:程序正常跑的时候,按键按下上升沿触发进入中断超过3s   执行Sys_Enter_Standby(); //进入待机模 。

疑问:唤醒,是不是因为唤醒键高电平不进入中断?


RCC_APB2PeriphResetCmd(0X01FC,DISABLE); //这里函数的意思为强制或者释放时钟 不知道有什么用 时钟不复位吗?还有0X01FC是不是为电源时钟那里看?没有这句话程序也正常跑











妈妈说真心爱,会爱得很精彩,结果我没有女孩!!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-27 21:02:59 | 显示全部楼层
回复【楼主位】烈火电子:
---------------------------------
进入中断只有在正常运行的时候才进入.
待机模式唤醒,是直接从头开始运行的.
不是响应中断
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2013-7-21
在线时间
0 小时
 楼主| 发表于 2013-7-28 17:20:47 | 显示全部楼层
谢谢
回复 支持 反对

使用道具 举报

8

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2013-5-8
在线时间
2 小时
发表于 2013-8-3 22:15:31 | 显示全部楼层
原子哥,WUK唤醒不是重头开始执行吧,如果是跟RST一样重头开始执行,那又会执行if(Check_WKUP()==0) Sys_Standby(); 从而又进入待机模式,所以WUK唤醒应该是接着唤醒前继续执行才对啊。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-3 22:33:40 | 显示全部楼层
回复【4楼】叶亦超:
---------------------------------
wkup唤醒就是从头开始执行.并且不会发生你说的现象.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2013-5-8
在线时间
2 小时
发表于 2013-8-3 23:08:23 | 显示全部楼层
我看懂了,wkup唤醒和RST效果是一样的。谢谢原子哥
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-15 22:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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