待机唤醒实验程序详解

2019-07-21 05:09发布

        我看了唤醒待机实验程序,也和大多数人有同样的疑问,看了大家的讨论明白了,把自己的理解写下来:
       1、Check_WKUP()函数返回值为1时,在中断函数中执行的是进入待机,程序怎样执行唤醒的操作?
            按下 WK_UP引脚会有两种情况:
        (1)当此时处于待机时,按下键会马上唤醒芯片
            此时从程序开始执行,即从主函数的第一句话开始执行

    ( 此时不执行中断程序,唤醒指的就是主程序从第一句话执行,并且待机模式下,中断使能等操作的寄存器内容早已丢失。 )

         执行到  WKUP_Init()时,在这个函数中有检测函数  if(Check_WKUP()==0)这条语句,判断是否按键达到3秒,
        达到后则跳过进入待机模式的函数:Sys_Enter_Standby(); 进行中断初始化,和主函数中其他的初始化。
        未达到3秒,则进入待机,这就是为什么下载完程序后会自动复位,因为检测不到按键按下,自然也没3秒,芯片进入待机状态。程序中有个巧妙设计,即增加一个变量tx记录时间,当tx>3时,即等了3个30ms按键都没按下,视为一次误操作,此时,返回0;这样,不用等待3S就能迅速进入待机,如果按照大多数人的想法,等3秒再去看是否有键按下,浪费了时间。

      ( 通过if(Check_WKUP()==0) {Sys_Enter_Standby();},这两句话实现了按下3秒开机,3秒以内关机的功能。)

   (2)当芯片运行时,按下按键,执行中断函数

   2、中断中只执行进入待机的操作,至于唤醒操作是在初始化函数WKUP_Init()中实现的,由于WKUP_Init()函数能实现  WKUP键未按下120ms后有返回值,returned 0;通过调用该函数可以知道返回0时键未按下3s,主函数中是if(Check_WKUP()==0{Sys_Enter_Standby();}中断函数中是if(Check_WKUP()) {Sys_Enter_Standby();},通过if语句实现了按下3秒与不足3秒的不同控制。
    
   3、程序中的创新的地方是tx变量的使用,有效的节省了判断是否3秒的时间,当我们没有按下WKUP时,经过90ms就能给出返回值,示意不足三秒,当我们按下WKUP时,不论我们按多长时间,总能在松开后90ms后给出判断,按下1500ms,在90ms后返回0;
 





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
amwps290
1楼-- · 2019-07-22 02:05
我感觉看这个程序的时候特别在3s开机的功能有点模糊,后来想了一下,是在待机模式下,按下WK_UP键以后,立即进入开机状态,同时检测按键的时间是否超过3s,如果按下3s以后,不会进入if语句内,如果未超过3s则进入if语句内,执行进入待机函数,总体来说,就是开机时按下3秒,就开机,如果开机时未按下3s就进入待机。
一个渣渣
2楼-- · 2019-07-22 04:43
感谢分享,终于弄懂了
怒摔鍵盤
3楼-- · 2019-07-22 08:57
 精彩回答 2  元偷偷看……
佩奇宝宝
4楼-- · 2019-07-22 10:20
很强

一周热门 更多>