OpenEdv-开源电子网

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

待机唤醒

[复制链接]

51

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
347
金钱
347
注册时间
2012-5-20
在线时间
0 小时
发表于 2012-7-13 09:09:38 | 显示全部楼层 |阅读模式
今天在看程序时,有一个小疑问
1、作为PA口IO辅助功能映射,PA0有wkup adc0 等,那么开启辅助时钟,就表示PA0口现在是wkup吗?
2、看了手册后,如果是想ADC0的功能 是不是在这个基础上 还要开启ADC0的时钟使能,
3、长按3s表示开机,逻辑上没太理解,如果长按下3s,由于上升沿触发,进入中断,那么不就进入待机模式了吗,也不是开机啊,逻辑乱了,希望帮忙分析下?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2016-7-18
在线时间
41 小时
发表于 2016-8-25 11:46:05 | 显示全部楼层
beisiqiu 发表于 2012-7-13 10:42
回复【2楼】正点原子:
---------------------------------
1、是不是设置了PWR_CSR的第8位EWUP就表示开 ...

我是新手我一开始也有和你一样的疑问,其实这是对STM32进入及退出待机模式这一段没看清楚而已,关键的是退出也就是唤醒单片机的方式有WKUP上升沿,RTC闹钟等等,其实当你一按WKUP就已经开机了,但要维持3S因为if(chech_wkup==0)Sys_Standby();不超过三秒会执行此命令,此时却不会启动中断函数原因是待机情况下所有时钟、内核都会关闭。
这是作为一个新手对你的问题的理解,现在你可能应该是高手了,看到这个问题应该会觉得很幼稚,但这是我第一次在论坛的回复所以有点小激动
回复 支持 1 反对 0

使用道具 举报

10

主题

75

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2015-5-22
在线时间
0 小时
发表于 2015-8-14 16:08:50 | 显示全部楼层
回复【21楼】龙之谷:
---------------------------------
嗯 现在明白了  主要在于我之前以为待机唤醒唤醒后从之前的位置继续执行,实际上不是,相当于reset,需要重新初始化。
不错不觉得这个唤醒没什么用啊 既然是相当于reset,那直接关了就行了,还待机有啥用
我建了一个战舰stm32交流群:320350722 新手请教老手,老手大显身手! stm32交流群:320350722 stm32交流群:320350722
回复 支持 1 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-7-13 09:25:20 | 显示全部楼层
1,不是.
2,是.
3,看代码.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

51

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
347
金钱
347
注册时间
2012-5-20
在线时间
0 小时
 楼主| 发表于 2012-7-13 10:42:10 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
1、是不是设置了PWR_CSR的第8位EWUP就表示开启了I/O上的WkUP功能,就可以从待机模式唤醒?手册上只说了用于将CPU唤醒,但没明确说开启了I/O这个WKUP功能。
3、待机模式进入方式是在执行完SLEEPDEEP位,设置PDDS位,清除WUF位后,执行WFI则进入待机模式
现在开机的话,WKUP置高且按3s,进入中断函数,由于按3S则Check_WKUP返回1,会进入Sys_Standby  虽然设置了WKUP唤醒,但是进入了Sys_Standby,待机的条件也满足了啊,不应该又进入待机吗?不清楚哪里搞错了,代码也看了好多次了

实在是看了好多次 ,对于说在WKUP_Init中有判断WKUP是否按下3S来决定是否开机,我实在没找到啊
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
}
if(Check_WKUP()==0)Sys_Standby();  这句后面并没看到有说,不是待机 就进入开机的else啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-7-13 11:28:42 | 显示全部楼层
1,WKUP其实就是一个在待机模式还运行的外部中断,中断号为0,这个你看代码难道看不出来?设置为0X08,然后NVIC配置,你都视而不见?
3,检查3秒,Check_WKUP这个函数你有看过么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-7-13 11:29:39 | 显示全部楼层
看代码要看全,一个函数可能就把所有的功能都做完了.
以后看代码的时候不要放过任何一个函数.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-7-13 11:31:48 | 显示全部楼层
回复【3楼】beisiqiu:
---------------------------------
  if(Check_WKUP()==0)Sys_Standby();    //不是开机,进入待机模式  
当Check_WKUP返回1的时候,你分析下代码怎么运行吧.
还搞不懂问你C语言老师,让他和你说说代码是怎么运行的.

另外:有if就一定要else么?  
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

51

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
347
金钱
347
注册时间
2012-5-20
在线时间
0 小时
 楼主| 发表于 2012-7-13 14:27:22 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
师兄,这里代码的每一句话 我都看的很仔细

我的疑惑是,下载完程序进入待机模式,这个我懂
WK_UP作为唤醒引脚,检测到输入为高时就会触发CPU,我就是没搞懂3S和它有什么关系,不应该是只要检测到了就会唤醒吗?
你可能会说CHECK_WKUP这个是检测3S的,这个我知道,但是如果在WK_UP检测到输入为高后,而且长按超过3S,CHECK_WKUP返回1,那么不就也进入到void EXTI0_IRQHandler(void)
{                      
EXTI->R=1<<0;  //清除LINE10上的中断标志位   
if(Check_WKUP())//关机?
{   
Sys_Enter_Standby();  
}

之后不就运行了Sys_Enter_Standby();  随后进入待机模式吗?这就是我理解的过程。中午想了一中午 也没明白到底咋回事 您的话 我也真是反复看了 
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-7-13 14:30:10 | 显示全部楼层
回复【7楼】beisiqiu:
---------------------------------
3秒是我故意加的.如果你有兴趣,就可以重写我们的Check_WKUP函数,你喜欢什么样就写什么样.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

51

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
347
金钱
347
注册时间
2012-5-20
在线时间
0 小时
 楼主| 发表于 2012-7-13 15:39:51 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
您没明白我的意思  下载完程序后是按3S就开机 ,小于3S不开机
您先帮我解决一个疑问吧 如果wkup检测为高 会进入到中断函数吗
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-7-13 16:40:02 | 显示全部楼层
回复【9楼】beisiqiu:
---------------------------------
STM32中斷都是檢測邊沿的,不是檢測電平的.
你的答案從我上面這句話自己分析.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2014-6-13
在线时间
11 小时
发表于 2014-6-18 22:29:39 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
   老师,我今天调试遇到一个问题 。
   我把进入待机状态的那段代码放在TIMER3中断里和放在主函数里效果居然不一样。
放在中断进入待机后整个系统电流只有不到1ma,放在主函数里执行完后居然有5ma左右 ,而且两种方法PA0上升沿唤醒时好像没作用。为什么会这样呢?
手册看了一遍,您的例程也认真读了一遍,可就是找不出原因,麻烦老师帮忙分析下。是不是还是我配置的原因?是不是除下面的之外还需要别的配置考虑?
   我程序是完全参照您的待机模式寄存器版例程配置的,其它功能都没问题,就是尝试降低功耗时出了以上奇怪的问题。麻烦老师帮忙分析一下。我看了一遍手册,好像待机与WKUP唤醒关键只用如下配置(和您的配置步骤一样):
   1、进入
在以下条件下执行WFI或WFE指令:
– 设置Cortex?-M3系统控制寄存器中的SLEEPDEEP位
– 设置电源控制寄存器(PWR_CR)中的PDDS位
– 清除电源控制/状态寄存器(PWR_CSR)中的WUF位被
   2、退出 
 WKUP引脚的上升沿
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-6-18 23:39:27 | 显示全部楼层
回复【11楼】Dasea:
---------------------------------
你直接下载我们例程试试看,可以唤醒么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2014-6-13
在线时间
11 小时
发表于 2014-6-19 08:15:02 | 显示全部楼层
回复【12楼】正点原子:
---------------------------------
回复【12楼】正点原子:
---------------------------------
试过  可以  可是找不到我这边配置的原因
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-6-19 23:08:21 | 显示全部楼层
回复【13楼】Dasea:
---------------------------------
那直接移植我的过去.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-6-19 23:08:36 | 显示全部楼层
先小改,再大改
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2014-10-18
在线时间
1 小时
发表于 2015-1-18 21:59:25 | 显示全部楼层
回复【7楼】beisiqiu:
---------------------------------
你这个问题搞明白了吗?我也是这个地方不明白,原子哥的脾气貌似不太好,不敢多问了
回复 支持 反对

使用道具 举报

51

主题

340

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3275
金钱
3275
注册时间
2013-9-21
在线时间
281 小时
发表于 2015-2-4 06:23:41 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
原子哥我想问的唤醒后正常运行下在按按钮进入待机为什么是3秒
应该是按下按钮触发中断然后判别 Check_WKUP(void)等于0进入待机应该不用一秒才是阿
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

51

主题

340

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3275
金钱
3275
注册时间
2013-9-21
在线时间
281 小时
发表于 2015-2-5 06:29:28 | 显示全部楼层
回复【18楼】正点原子:
---------------------------------
谢谢测试了大概理解为什么了
回复 支持 反对

使用道具 举报

10

主题

75

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2015-5-22
在线时间
0 小时
发表于 2015-8-13 00:55:45 | 显示全部楼层
回复【3楼】beisiqiu:
---------------------------------
退出 stangby模式 
 只需要WKUP引脚的上升沿
个人感觉没有必要3秒
所以原子的这里应该是写的有问题
我建了一个战舰stm32交流群:320350722 新手请教老手,老手大显身手! stm32交流群:320350722 stm32交流群:320350722
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-8-13 08:41:58 | 显示全部楼层
回复【20楼】13128927795:
---------------------------------
单纯退出待机模式确实只需要WKUP上升沿

但待机唤醒实验待机时需要按下3S以上,否则再次进入待机模式
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-8-14 16:54:27 | 显示全部楼层
回复【22楼】13128927795:
---------------------------------
直接关了你怎么让它再运行,实验用开发板开关方便,设备如果放到高山峡谷什么的你就知道待机的作用了
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

10

主题

75

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2015-5-22
在线时间
0 小时
发表于 2015-8-14 17:00:02 | 显示全部楼层
回复【23楼】龙之谷:
---------------------------------
啥时候用再打开不就行了
我建了一个战舰stm32交流群:320350722 新手请教老手,老手大显身手! stm32交流群:320350722 stm32交流群:320350722
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-8-14 17:05:29 | 显示全部楼层
回复【24楼】13128927795:
---------------------------------
我上边说法有误

开发指南中:例如等待某个外部事件时。
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

10

主题

75

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2015-5-22
在线时间
0 小时
发表于 2015-8-14 17:13:12 | 显示全部楼层
嗯 这倒是还是能省点电的
我建了一个战舰stm32交流群:320350722 新手请教老手,老手大显身手! stm32交流群:320350722 stm32交流群:320350722
回复 支持 反对

使用道具 举报

4

主题

24

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2015-8-13
在线时间
6 小时
发表于 2015-8-16 13:22:12 | 显示全部楼层
回复【26楼】13128927795:
---------------------------------
看见你说 唤醒相当于一个reset 顿时恍然大悟 之前以为唤醒是进入中断服务函数了
回复 支持 反对

使用道具 举报

10

主题

75

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2015-5-22
在线时间
0 小时
发表于 2015-8-17 13:49:25 | 显示全部楼层
回复【27楼】菜鸟520:
---------------------------------
哈哈我也是看原子哥这么说的
我建了一个战舰stm32交流群:320350722 新手请教老手,老手大显身手! stm32交流群:320350722 stm32交流群:320350722
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
38
金钱
38
注册时间
2016-8-13
在线时间
7 小时
发表于 2016-9-24 22:18:29 | 显示全部楼层
13128927795 发表于 2015-8-14 16:08
回复【21楼】龙之谷:
---------------------------------
嗯&nbsp;现在明白了&nbsp;&nbsp;主要在于我之前以 ...

。。开始推了一遍,也想不明白,看到这里才明白了,原来是在这里if(Check_WKUP()==0)
Sys_Standby(); 检测的3秒,刚下载没按3秒,待机,之后weak_up相当于reset进入,又到这里检测到了开机的3秒,不进入待机。。。那中断就和开机没关系了,中断只是为了待机而设的,,有一楼说的好像有问题,待机了应该都关了,怎么会有中断。
谢谢!
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2017-3-3
在线时间
10 小时
发表于 2017-3-27 23:03:23 | 显示全部楼层
唤醒相当于一个reset!!!!这句话是重点!
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2012-7-27
在线时间
9 小时
发表于 2017-3-29 11:18:19 | 显示全部楼层
找到这个帖子,看了一下原子哥的程序,起始按下WKUP时已经是唤醒了,程序也已经从头开始执行了,但是在初始化还没进入main程序时,原子哥在里面设定了一个检测按键3S的程序,也就是Check_WKUP(),这里面就一个功能,那就是静静等待按键按下3秒,否则唤醒了有立即进入待机功能。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-22 17:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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