1.關(guān)于待機模式與斷電模式的區(qū)別:
下圖參考手冊P37電源控制章節(jié):
stm32關(guān)于待機模式下,該模式是在Cortex-M3深睡眠模式時關(guān)閉電壓調(diào)節(jié)器。整個1.8V供電區(qū)域被斷電。PLL、HSI和HSE振蕩器也被斷電。SRAM和寄存器內(nèi)容丟失。只有備份的寄存器和待機電路維持供電。也就是說,待機模式下,STM32的除了備份區(qū)以外,待機電路中的比如喚醒電路和看門狗仍然是工作的,而普通IO口由于PLL、HSI、HSE的斷電均高阻態(tài)無法工作。比如我們設(shè)置了WKUP喚醒,那么即使待機模式下,PA0仍具有檢測上升沿實現(xiàn)喚醒功能(注意,待機狀態(tài)下這種喚醒并不是外部中斷,中斷控制器都停止工作了!)
而斷電模式則是只有后備區(qū)域供電,這與待機模式還是有區(qū)別的?。tm32的待機模式就相當于我們的手機處于關(guān)機狀態(tài),因此這個待機和我們手機平時說開機時的“待機”還是有差別的。
2.我們可以通過待機通過WKUP喚醒實現(xiàn)類似手機按開機關(guān)機鍵的操作
如何進入待機模式:手冊寫的詳細調(diào)用庫函數(shù)PWR_EnterSTANDBYMode()即可,注意PWR_CR寄存器待機模式下也會清空,不屬于后備區(qū),因此上電后如果想使能WKUP喚醒需重新再寫一次。
void Sys_Standby(void)
{
//注意操作PWR電源寄存器先使能PWR時鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能PWR外設(shè)時鐘
PWR_WakeUpPinCmd(ENABLE);//使能喚醒管腳功能
PWR_EnterSTANDBYMode();//進入待命(STANDBY)模式
}
3.關(guān)于原子喚醒實驗主要就是要理解這個的外部中斷與待機喚醒不是同一回事,外部中斷PA0是在正常模式下才起作用的,而待機喚醒是待機模式下,此時中斷已經(jīng)停止工作了,而喚醒是另一種方式而已!
手冊這么說的:當一個外部復(fù)位(NRST引腳)、IWDG復(fù)位、WKUP引腳上的上升沿(注意不是中斷)或RTC鬧鐘事件發(fā)生時,微控制器從待機模式退出。從待機喚醒后,除了電源控制/狀態(tài)寄存器(PWR_CSR),所有寄存器被復(fù)位。
4.關(guān)于原子程序的解釋:
如3所說WAKE_UP其實只是在待機模式下只需檢測一個上升沿即可,也就是說其實待機模式下只要按下WAKE_UP實際上就已經(jīng)喚醒了,為何3秒后才亮是因為在執(zhí)行初始化中的函數(shù)Check_WKUP()又等待了三秒,而正常模式下卻是在中斷中等待了3秒。比如講初始化下面這句注釋掉,你就會看到上電喚醒只要一個上升沿!(這樣好處也就給我們感覺開關(guān)機時間是一樣的)
也就是這個實驗注意1、在待機狀態(tài)下,按下按鍵,程序執(zhí)行是從初始化開始的。2、在開機狀態(tài)下,按下按鍵是從中斷執(zhí)行的(檢測到上升沿)
擴展:手機關(guān)機定時啟動這種就類似32的鬧鐘喚醒