中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

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

        STM32的待機(jī)喚醒實(shí)驗(yàn)分析(基于原子哥程序)

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

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

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

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

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

          3、進(jìn)入待機(jī)模式 : PWR_EnterSTANDBYMode();

          請(qǐng)看代碼:

          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ù)位,然后進(jìn)入待機(jī)模式

          {

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

          Sys_Standby();

          }

          

         

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

          u8 Check_up(void)

          {

          u8 t = 0;

          u8 tx = 0;

          LED0 = 0;

          while(1)

          {

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

          {

          t++;

          tx = 0;

          }

          else

          {

          tx++;

          if(tx > 3)

          {

          LED0 = 1;

          return 0; //錯(cuò)誤按鍵或者按鍵時(shí)間不夠

          }

          }

          delay_ms(30);

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

          {

          LED0 = 0;

          return 1;// 3s

          }

          }

          }

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

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

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

          if (Check_up() == 0)

          29 {

          30 Sys_Standby(); //進(jìn)入待機(jī)模式

          31 }

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

          記?。?jiǎn)拘阎兄皇钦f需要上升沿、、并沒有說要進(jìn)入中斷

          所以:

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

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

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


        上一頁 1 2 下一頁

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

        評(píng)論


        相關(guān)推薦

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

        關(guān)閉