OpenEdv-开源电子网

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

待机唤醒实验中Sys_Enter_Standby()和Sys_Standby()怎么理解??

[复制链接]

4

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-3-9
在线时间
0 小时
发表于 2014-3-15 22:34:32 | 显示全部楼层 |阅读模式
Sys_Enter_Standby()中让所有I/O口复位然后再进入Sys_Standby(),这里的复位是什么意思??让I/O口处于浮空输入??那怎么会能使while中的LED亮灭变化,如果浮空输入的话应该不会有高低电平输出的??如果在Sys_Enter_Standby()中把RCC->APB2RSTR|=0x0xFC删掉的话,Sys_Enter_Standby()和Sys_Standby()就一样了,为啥照样可以按键唤醒??
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-16 14:18:59 | 显示全部楼层
回复【7楼】xhh12001501:
---------------------------------
这个函数:
//检测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以上了
}
}
}  

代码不多,容易理解。

你关键理解一个概念:待机唤醒后,程序是从main函数从头开始运行的。
理解这句话的意思,就不难了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 2 反对 0

使用道具 举报

4

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-3-9
在线时间
0 小时
 楼主| 发表于 2014-3-15 22:34:51 | 显示全部楼层
@正点原子
回复 支持 反对

使用道具 举报

4

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-3-9
在线时间
0 小时
 楼主| 发表于 2014-3-15 22:35:44 | 显示全部楼层
自顶
回复 支持 反对

使用道具 举报

4

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-3-9
在线时间
0 小时
 楼主| 发表于 2014-3-15 22:36:11 | 显示全部楼层
希望大家为我解决疑惑 谢谢
回复 支持 反对

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13118
金钱
13118
注册时间
2012-11-26
在线时间
3813 小时
发表于 2014-3-15 23:01:11 | 显示全部楼层
在进入待机模式之前  复位所有的IO口

楼主可以参考 http://www.openedv.com/posts/list/29.htm
学无止境
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-15 23:16:20 | 显示全部楼层
回复【楼主位】xhh12001501:
---------------------------------
复位后,没有LED亮啊。。。你哪里看到亮了?

回复【楼主位】xhh12001501:
---------------------------------
Sys_Enter_Standby和Sys_Standby一样,为什么就不能唤醒了?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-3-9
在线时间
0 小时
 楼主| 发表于 2014-3-16 09:58:15 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
长按wkup达3s后,led灯就有了亮灭变化哦。能不能具体解释一下那两个函数意思??我没理解清楚诶。
回复 支持 反对

使用道具 举报

4

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-3-9
在线时间
0 小时
 楼主| 发表于 2014-3-16 09:59:45 | 显示全部楼层
回复【5楼】jermy_z:
---------------------------------
我也买了那本书看,就是那两个函数没理解清楚哦。比如要在待机模式下RTC工作,怎么弄呢??
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-16 14:19:30 | 显示全部楼层
回复【8楼】xhh12001501:
---------------------------------
RTC本来就是工作的,和你待机不待机没关系。
只要你开启RTC了,就一直跑的。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-3-9
在线时间
0 小时
 楼主| 发表于 2014-3-16 15:16:49 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
如果在源程序里面将Sys_Enter_Standby()中把RCC->APB2RSTR|=0x0xFC删掉的话,这时Sys_Enter_Standby()和Sys_Standby()就一样了,为啥照样可以按键唤醒??
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-16 18:45:40 | 显示全部楼层
回复【11楼】xhh12001501:
---------------------------------
RCC->APB2RSTR|=0x0xFC
这条语句,和唤醒,没有直接关系....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-3-9
在线时间
0 小时
 楼主| 发表于 2014-3-16 19:09:53 | 显示全部楼层
回复【12楼】正点原子:
---------------------------------
按照你这么说,无论Check_WKUP为何值,系统始终都是会进入Sys_Standby,都会处于待机模式的嘛!那怎么唤醒工作的嘛?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-16 23:54:28 | 显示全部楼层
回复【13楼】xhh12001501:
---------------------------------
你电话我吧:15902020353
 
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-3-9
在线时间
0 小时
 楼主| 发表于 2014-3-17 23:20:11 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
恩 好的 !由于今天一直在忙,现在才回复你。明天我电联你!
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
发表于 2014-3-18 19:52:54 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
看来原子急了,居然电话都放出来了。
顺便问下,进入standby之前不复位IO,使其按照之前状态一直工作可以么?比如之前高电平,standby之后还是保持高电平
回复 支持 反对

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13118
金钱
13118
注册时间
2012-11-26
在线时间
3813 小时
发表于 2014-3-18 20:25:42 | 显示全部楼层
回复【16楼】wwjdwy:
---------------------------------
唤醒之后,从main函数重新开始,应该保持不了吧
学无止境
回复 支持 反对

使用道具 举报

4

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-3-9
在线时间
0 小时
 楼主| 发表于 2014-3-18 21:25:02 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
原子哥,你在其它的帖子回复我了。要是不行的话,再电联你哦!!
回复 支持 反对

使用道具 举报

4

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-3-9
在线时间
0 小时
 楼主| 发表于 2014-3-18 22:42:40 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
//RTC中断服务函数
void RTC_IRQHandler(void)
{     
if(RTC->CRL&0x0001)//秒钟中断
{
RTC_Get();//更新时间
if((timer.hour!=13)||((timer.hour==13)&&((timer.min<39)||(timer.min>=40))))//在13:38和13:40时间外休眠
{
Sys_Standby(); //13:39和13:40时间工作

}
if(RTC->CRL&0x0002)//闹钟中断
{
RTC->CRL&=~(0x0002);//清闹钟中断
}      
RTC->CRL&=0X0FFA;         //清除溢出,秒钟中断标志
while(!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成            
}
原子哥,现在系统能RTC唤醒,但是时分秒在LCD上不能正常显示,显示的始终是RTC_Set(2014,1,8,13,38,45);而且刷屏效果不是很好,有“影子”。这是为什么呢?
int main()
{
u8 t=0;
SystemInit();
delay_init(72);
LED_Init();
uart_init(9600);
NVIC_Configuration();
LCD_Init();
RTC_Init();
LCD_Clear(BLUE);
POINT_COLOR=RED;
LCD_ShowString(30,30,"RTC TEST");
LCD_ShowString(30,50," 2010 / 12 / 30 ");
LCD_ShowString(30,70,"               ");
LCD_ShowString(20,110,"             ");
POINT_COLOR=BLUE;


while(1)
{
if(t!=timer.sec)
{
t=timer.sec; 
LCD_ShowNum(30,70,timer.w_year,4,16);
LCD_ShowNum(70,70,timer.w_month,2,16);
LCD_ShowNum(90,70,timer.w_date,2,16);
switch(timer.week)
{
case 0CD_ShowString(30,90,"Sunday");break;
case 1CD_ShowString(30,90,"Monday");break;
case 2CD_ShowString(30,90,"Tuesday");break;
case 3CD_ShowString(30,90,"Wednesday ");break;
case 4CD_ShowString(30,90,"Thursday");break;
case 5CD_ShowString(30,90,"Friday");break;
case 6CD_ShowString(30,90,"Saturday");break;
}

LCD_ShowNum(30,110,timer.hour,2,16);
LCD_ShowNum(50,110,timer.min,2,16);
LCD_ShowNum(80,110,timer.sec,2,16);
LED0=!LED0;

}
delay_ms(10);
}
}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-18 23:03:42 | 显示全部楼层
回复【19楼】xhh12001501:
---------------------------------
唤醒后,LCD没有硬复位,是不是这个问题引起的?
你不进入待机模式的时候,显示是否正常?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 08:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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