《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 業(yè)界動(dòng)態(tài) > STM32的待機(jī)喚醒實(shí)驗(yàn)分析(基于原子哥程序)

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

2017-07-11
關(guān)鍵詞: STM32 MCU Cortex-M3 PWR_CR

       前段時(shí)間我稍微涉及節(jié)能減排大賽、、倡導(dǎo)節(jié)能的社會(huì)、、沒(méi)錯(cuò)了、你真是太聰明了、、知道了我今天要講關(guān)于STM32節(jié)能方面的模塊、、沒(méi)錯(cuò)、、這標(biāo)題已經(jīng)告訴你了是吧、、哦,對(duì),標(biāo)題有寫、、所以、、言歸正傳、至于STM32如何達(dá)到節(jié)能的、、語(yǔ)文老師說(shuō)要留下懸念、、跟著作者走下去、、也就是跟我啦、、

  大家翻開(kāi)STM32的中文參考手冊(cè)(你們看就行了,我翻,然后截圖),里面關(guān)于STM32的低功耗模式有詳細(xì)的標(biāo)注,突然不想截圖。。

  1、睡眠模式(Cortex?-M3內(nèi)核停止,所有外設(shè)包括Cortex-M3核心的外設(shè),如NVIC、系統(tǒng)時(shí)鐘(SysTick)等仍在運(yùn)行)

  2、停止模式(所有的時(shí)鐘都已停止)

  3、待機(jī)模式(1.8V電源關(guān)閉)(我們本博客中具體介紹的一種模式,也是功耗最低的模式)

  現(xiàn)附上三者照片、、望觀眾好好欣賞、、還有請(qǐng)稍微注意下我的涂鴉、、小弟感激不盡:

81af28f29ac6cad10822c9df428c50ed.png

  啊哈、、這照片是不是很神奇呀、、即把三個(gè)老家伙的家底進(jìn)行了較為認(rèn)真的比較,而且從照片中我們也可以看出,如何進(jìn)入,如何喚醒他們、、而且有什么影響都跟我們透露了、、可謂是后生可畏呀、、所以我叫大家注意我美麗的涂鴉是有道理的、、哈、

  在本博客中,我們就利用WKUP引腳的上升沿來(lái)喚醒MCU、、不好意思哈、、老是把上升沿打成上小沈陽(yáng)、、所以我們就具體來(lái)介紹待機(jī)喚醒的實(shí)現(xiàn)方法、、

  那我們要怎么來(lái)進(jìn)入待機(jī)模式、、又要怎么喚醒呢?

2df240eaa70ad0f4a50069c7a82efa77.png

  看到“進(jìn)入”中的紅色數(shù)字標(biāo)號(hào)了吧、、沒(méi)錯(cuò)了、、我們只要按照此步驟來(lái)設(shè)置相應(yīng)的寄存器就行了、、那、、我打???的是什么呢??好了、、請(qǐng)容許我介紹下:

  1、 Cotex_M3系統(tǒng)控制寄存器中的SLEEPDEEP位到底在哪呢??大家請(qǐng)翻開(kāi)《權(quán)威指南》第182頁(yè)可以看到表格、、當(dāng)然這里不用你翻開(kāi)、、因?yàn)槲乙呀貓D:

726a16d8d8a9e872716727de5c0a3e78.png

  2、電源控制寄存器(PWR_CR)中PDDS位:請(qǐng)看寄存器的位:

cca05b1eee1e1a04df424f668752e3c1.png

  3、電源控制/狀態(tài)寄存器(PWR_CSR)中EWUP位

63d688a2ef411de905bf97f14682c0e7.png

  至此、我們通過(guò)這三步、完成了進(jìn)入待機(jī)模式的任務(wù)、、那我們?cè)趺赐ㄟ^(guò)程序?qū)崿F(xiàn)呢?啊哈、、庫(kù)神出現(xiàn)吧、、:::系統(tǒng)出現(xiàn)奔潰、、請(qǐng)稍后、、詳情請(qǐng)咨詢10086、、

  額、、出現(xiàn)了點(diǎn)意外、、不急哈、、那我們先來(lái)看看怎么退出待機(jī)模式:重現(xiàn)一張圖片:

0ac5b9e25a140151a50cc588b4c056c6.png

  看到了吧、、在這里我們就利用其中一種方式來(lái)喚醒:WKUP引腳的上升沿、、注意哈、、注意此上升沿三個(gè)字哈、、 至于為什么要注意上升沿、、在這里提出我也是有目的、、先記著哈、、你此時(shí)想的為什么要注意的原因肯定跟我待會(huì)提到的時(shí)候不一樣、、在此先奸笑下、、

  那我們要怎么來(lái)喚醒呢??

  親、、我們通過(guò)外部中斷觸發(fā)來(lái)喚醒、、所以請(qǐng)看代碼:

  1 void Wkup_Init(void)

  2 {

  7 EXTI_InitTypeDef EXTI_InitStructure;

  8 NVIC_InitTypeDef NVIC_InitStructure;

  9

  10 KEY_Init();//我的IO初始化在按鍵里已經(jīng)初始化了

  11

  12 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

  13

  14 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);

  15

  16 EXTI_InitStructure.EXTI_Line = EXTI_Line0; //PA0

  17 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

  18 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;

  19 EXTI_InitStructure.EXTI_LineCmd = ENABLE;

  20 EXTI_Init(&EXTI_InitStructure);

  21

  22 NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;

  23 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;

  24 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;

  25 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  26 NVIC_Init(&NVIC_InitStructure);

  27

  28 if(Check_up() == 0) //系統(tǒng)初始化后由于沒(méi)有按下按鍵、、所以系統(tǒng)直接進(jìn)入了待機(jī)模式了,所以下載了程序沒(méi)有任何反應(yīng)、、需要人為的喚醒:死豬,就知道睡,快醒、、

  29 {

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

  31 }

  32 }

  復(fù)制代碼

  復(fù)制代碼

  //正常模式下會(huì)運(yùn)行中斷服務(wù)函數(shù),而待機(jī)模式下則不會(huì)運(yùn)行中斷服務(wù)函數(shù)、、因?yàn)榇龣C(jī)模式下MCU不工作,所以上升沿的作用也僅僅是喚醒、、

  //在這里提醒:?jiǎn)拘阎恍枰仙亍ⅰ⑺詮拇龣C(jī)模式切換到正常模式下從始至終都不會(huì)執(zhí)行中斷服務(wù)函數(shù)

  //在這里,知道我為什么要在上面提醒大家要注意上升沿了吧、(下面還有)、

  //至于為什么不會(huì)執(zhí)行,待會(huì)我還會(huì)給出解釋、、

  3 void EXTI0_IRQHandler(void)

  4 {

  5 EXTI_ClearITPendingBit(EXTI_Line0);

  6 if(Check_up())

  7 {

  8 Sys_Enter_Standby();

  9 }

  10 }

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

  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)用,用來(lái)復(fù)位,然后進(jìn)入待機(jī)模式

  {

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

  Sys_Standby();

  }

f311bedf6e406a28d58c9e3260d51f8c.png

  最后我們給出按鍵檢測(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ù)開(kāi)始檢測(cè) 如果時(shí)間沒(méi)超過(guò)3s 返回零 這時(shí)工作在正常運(yùn)行模式 如果按住時(shí)間超過(guò)了3s 返回值為1 進(jìn)入待機(jī)模式

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

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

  所以:

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

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

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


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产精品99久久久久久有的能看| 亚洲精品乱码久久久久| 亚洲天堂av高清| 久久久亚洲人| 99成人在线| 老司机精品福利视频| 亚洲天堂激情| 欧美欧美全黄| 亚洲激情一区| 国产视频一区在线| 亚洲免费一区二区| 亚洲全黄一级网站| 欧美成人性生活| 久久国产精品久久国产精品 | 亚洲国产精品ⅴa在线观看| 久久国产精品一区二区| 国产精品99久久99久久久二8| 免费亚洲电影| 亚洲日本欧美天堂| 亚洲第一精品电影| 久久这里只精品最新地址| 香蕉久久精品日日躁夜夜躁| 国产精品magnet| 午夜精品久久久| 亚洲淫性视频| 国产精品自在欧美一区| 亚洲欧美文学| 欧美一区二区黄色| 国产日韩一区二区三区| 久久久www免费人成黑人精品| 久久爱另类一区二区小说| 狠狠色丁香久久综合频道| 麻豆精品精品国产自在97香蕉| 亚洲第一网站| 亚洲毛片播放| 国产美女精品在线| 裸体歌舞表演一区二区| 亚洲日本中文字幕免费在线不卡| 亚洲三级观看| 国产精品视频yy9299一区| 久久久欧美精品| 99国产精品视频免费观看| 中文亚洲视频在线| 狠狠狠色丁香婷婷综合激情| 免费在线成人| 午夜精彩国产免费不卡不顿大片| 欧美一区二区三区精品电影| 亚洲国产小视频在线观看| 国产精品久久久91| 欧美电影免费观看| 欧美一站二站| 夜夜爽夜夜爽精品视频| 国产精品国产三级国产普通话三级 | 一本色道综合亚洲| 亚洲午夜未删减在线观看| 最新日韩精品| 在线视频国产日韩| 国产午夜精品一区二区三区视频| 欧美日韩国产综合久久| 免费观看30秒视频久久| 久久这里有精品15一区二区三区| 亚洲专区在线视频| 亚洲欧洲日韩在线| 99国产精品视频免费观看| 在线看日韩av| 黄色一区二区三区| 国产日韩欧美日韩大片| 欧美三区视频| 欧美日韩激情小视频| 欧美福利视频在线观看| 久久亚洲精品一区| 美女国产一区| 久久最新视频| 欧美日韩精品免费观看视一区二区| 欧美日韩一区三区四区| 国产日韩精品在线播放| 国内在线观看一区二区三区| 在线欧美日韩| 一二三区精品| 久久成人综合视频| 在线中文字幕不卡| 久久久久久有精品国产| 欧美激情欧美狂野欧美精品| 欧美图区在线视频| 国产亚洲一级高清| 国产精品一区久久久久| 国产资源精品在线观看| 亚洲成色www久久网站| 亚洲第一精品电影| 亚洲精品乱码久久久久久黑人 | 亚洲曰本av电影| 欧美在线视频在线播放完整版免费观看| 亚洲综合电影| 久久精品国产欧美亚洲人人爽| 久久国产色av| 欧美久久久久久久久| 欧美天天视频| 国产一区二区精品丝袜| 亚洲东热激情| 亚洲一二三区在线| 久久精品日韩| 亚洲无限av看| 老司机精品福利视频| 欧美日韩一级片在线观看| 国产欧美综合一区二区三区| 在线观看欧美视频| 亚洲视频香蕉人妖| 亚洲国产成人久久| 午夜精品在线看| 欧美精品在线免费观看| 国产女精品视频网站免费| 亚洲国产高清自拍| 午夜精品久久久久99热蜜桃导演| 亚洲日本视频| 久久蜜桃精品| 国产精品制服诱惑| 99视频一区二区| 亚洲三级视频在线观看| 久久久久免费观看| 国产欧美日韩一区| 中文亚洲欧美| 亚洲图片欧美午夜| 欧美日本久久| 亚洲国产成人精品女人久久久| 午夜在线视频一区二区区别| 亚洲网站在线看| 欧美日韩一区二区三区在线视频| 亚洲第一在线| 亚洲激情一区二区| 老鸭窝亚洲一区二区三区| 国产欧美日韩麻豆91| 亚洲综合国产| 久久大香伊蕉在人线观看热2| 欧美性天天影院| 中文日韩在线| 午夜精品一区二区三区在线播放| 欧美午夜激情小视频| 日韩视频中午一区| 亚洲视频一二区| 国产精品嫩草久久久久| 亚洲一区视频| 久久久久久成人| 好吊一区二区三区| 亚洲欧洲日产国码二区| 欧美激情欧美激情在线五月| 亚洲欧洲在线观看| 99这里只有精品| 国产日产精品一区二区三区四区的观看方式 | 亚洲国产91精品在线观看| 欧美α欧美αv大片| 日韩午夜av电影| 欧美一级一区| 伊人精品视频| 正在播放欧美视频| 国产精品爽黄69| 亚洲国产精品欧美一二99| 欧美精品一区二区在线观看| 一本色道久久综合精品竹菊 | 国产精品一区毛片| 91久久久久久久久久久久久| 欧美男人的天堂| 亚洲欧美视频在线| 免费日韩av| 亚洲欧美日韩一区二区三区在线观看| 久久亚洲综合色| 99亚洲精品| 久久久亚洲高清| 99精品欧美一区二区三区综合在线| 性久久久久久久久久久久| 在线观看欧美日本| 久久av资源网| 亚洲网站视频福利| 欧美日产一区二区三区在线观看| 亚洲午夜三级在线| 欧美日产国产成人免费图片| 欧美一区二区视频在线| 欧美亚洲成人精品| 亚洲最新色图| 亚洲激情另类| 免费观看日韩av| 久久av一区二区三区| 国产精品视频| 香蕉久久国产| 国产精品99久久久久久久vr| 欧美国产另类| 亚洲免费精彩视频| 亚洲国产一区二区三区高清| 久久久精品视频成人| 欧美在线免费视屏| 国产日韩在线不卡| 亚洲男人的天堂在线观看| 一区二区三区日韩欧美| 欧美日韩高清在线一区| 一区二区三区国产精品| 亚洲精品一区二| 欧美三级乱人伦电影| 亚洲午夜精品网| 亚洲免费在线视频一区 二区| 国产精品海角社区在线观看| 亚洲性夜色噜噜噜7777|