<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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

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

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

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

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

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

  請看代碼:

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

  {

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

  PWR_WakeUpPinCmd(ENABLE);

  PWR_EnterSTANDBYMode();

  }

  void Sys_Enter_Standby(void)//在中斷函數里調用,用來(lái)復位,然后進(jìn)入待機模式

  {

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

  Sys_Standby();

  }

  

 

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

  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; //錯誤按鍵或者按鍵時(shí)間不夠

  }

  }

  delay_ms(30);

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

  {

  LED0 = 0;

  return 1;// 3s

  }

  }

  }

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

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

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

  if (Check_up() == 0)

  29 {

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

  31 }

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

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

  所以:

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

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

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


上一頁(yè) 1 2 下一頁(yè)

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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>