在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > STM32的待機喚醒實驗分析(基于原子哥程序)

            STM32的待機喚醒實驗分析(基于原子哥程序)

            作者: 時間:2016-10-10 來源:網(wǎng)絡(luò) 收藏

              看到以上代碼會不會熟悉呢??在這里就不解釋了哈、、所以重點來講講步驟

            本文引用地址:http://www.biyoush.com/article/201610/311123.htm

              1、使能PWR的時鐘:RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

              2 、使能喚醒的功能:PWR_WakeUpPinCmd(ENABLE);

              3、進入待機模式 : PWR_EnterSTANDBYMode();

              請看代碼:

              void Sys_Standby(void) //在喚醒初始化中調(diào)用

              {

              RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

              PWR_WakeUpPinCmd(ENABLE);

              PWR_EnterSTANDBYMode();

              }

              void Sys_Enter_Standby(void)//在中斷函數(shù)里調(diào)用,用來復(fù)位,然后進入待機模式

              {

              RCC_APB2PeriphResetCmd(0X01FC,DISABLE); //在這里只是復(fù)位了IO口、、至于0x01fc是怎么來的、、大家請看RCC_APB2RSTR(下圖)

              Sys_Standby();

              }

              

             

              最后我們給出按鍵檢測的處理程序、、在這里,3S只是一個效果、、也可以不用、、也可以長點、、看你個人哈(原子的程序,別告我盜版哈)

              u8 Check_up(void)

              {

              u8 t = 0;

              u8 tx = 0;

              LED0 = 0;

              while(1)

              {

              if(KEY3 == 1) //檢測到按鍵按下

              {

              t++;

              tx = 0;

              }

              else

              {

              tx++;

              if(tx > 3)

              {

              LED0 = 1;

              return 0; //錯誤按鍵或者按鍵時間不夠

              }

              }

              delay_ms(30);

              if(t > 100) //100*30ms = 3s

              {

              LED0 = 0;

              return 1;// 3s

              }

              }

              }

              看到這里、、可能有人會有些搞不懂在中斷服務(wù)函數(shù)那里的邏輯、、在這里我給出解釋哈:

              從正常運行模式切換到待機模式 按住wkup鍵 外部中斷0中斷被觸發(fā) 執(zhí)行中斷服務(wù)函數(shù) Check_up()函數(shù)開始檢測 如果時間沒超過3s 返回零 這時工作在正常運行模式 如果按住時間超過了3s 返回值為1 進入待機模式

              我們的程序在剛開始運行時就是沒有按鍵按下、、所以沒有上升沿,初始化函數(shù)里條件成立,從而進入了待機模式:請看初始化的代碼:

              if (Check_up() == 0)

              29 {

              30 Sys_Standby(); //進入待機模式

              31 }

              從待機模式切換到正常運行模式 按住wkup鍵的那一瞬間會有一個上升沿 而這個上升沿執(zhí)行了喚醒功能但是沒有執(zhí)行外部中斷0的中斷服務(wù)函數(shù) 待機模式下cpu是不工作的 從待機模式喚醒后的代碼執(zhí)行等同于復(fù)位后的執(zhí)行所以程序又會從頭開始執(zhí)行(這句話很重要) 然后又會執(zhí)行到 Check_up()函數(shù)檢測 如果按住鍵盤的時間沒有超過3s 還是會處于待機模式 加入超過了3s 返回值為1 條件不成立 就會切換到正常運行模式 所以結(jié)論就是外部中斷0的中斷服務(wù)程序在待機模式切換到正常運行模式的時候從始至終是不會運行的

              記住:喚醒中只是說需要上升沿、、并沒有說要進入中斷

              所以:

              1 、如果是正常運行,先執(zhí)行中斷程序,判斷是否3秒,決定是否待機。

              2 、如果是待機狀態(tài),則先復(fù)位并初始化,判斷是否3秒,決定是否開機。

              啊哈、、不知看到這里的你理解得怎么樣了、、我也是初學(xué)者,盡量用我所理解的來幫助你們理解、、用點自認(rèn)為是幽默的風(fēng)格來、、不會顯得那么的死板、、希望大家見諒哈、、初學(xué)者難免有理解上的失誤或者不懂或者講得不全面、、所以在這有寫錯的敬請原諒哈、、


            上一頁 1 2 下一頁

            關(guān)鍵詞: STM32 待機喚醒

            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉