在APM32E103系列芯片進(jìn)入低功耗模式前,一般會執(zhí)行如下幾行代碼
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE);
PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
以下為此代碼詳解:
在APM32F103這類微控制器中,電源時(shí)鐘(通常是主時(shí)鐘源)與芯片內(nèi)部的許多部分都有關(guān)系。以下是一些主要的相關(guān)部分:
中央處理單元(CPU):這是微控制器的主要計(jì)算部分,負(fù)責(zé)執(zhí)行程序代碼。CPU的操作是由時(shí)鐘驅(qū)動的,因此電源時(shí)鐘對CPU的運(yùn)行至關(guān)重要。
系統(tǒng)外設(shè):STM32F103包含了許多內(nèi)置的系統(tǒng)外設(shè),如GPIO(通用輸入/輸出)、UART(通用異步接收/發(fā)送)、SPI(串行外設(shè)接口)、I2C(雙向雙線串行總線)、ADC(模擬數(shù)字轉(zhuǎn)換器)、DAC(數(shù)字模擬轉(zhuǎn)換器)等。這些外設(shè)的操作通常都需要時(shí)鐘信號。
內(nèi)存:這包括隨機(jī)存取存儲器(RAM)和讀-只存儲器(ROM),它們用于存儲程序代碼和運(yùn)行時(shí)數(shù)據(jù)。內(nèi)存的讀寫操作也需要時(shí)鐘信號。
總線系統(tǒng):這包括處理器與內(nèi)存、外設(shè)等之間的數(shù)據(jù)通道。數(shù)據(jù)的傳輸通常需要時(shí)鐘信號。
時(shí)鐘樹:STM32F103有一個(gè)復(fù)雜的時(shí)鐘系統(tǒng),包括外部高速時(shí)鐘(HSE)、內(nèi)部高速時(shí)鐘(HSI)、PLL(鎖相環(huán))等。這些時(shí)鐘源通過時(shí)鐘樹連接到處理器和外設(shè)。
在芯片內(nèi)部,幾乎所有的電子系統(tǒng)都需要電源時(shí)鐘來驅(qū)動,因此電源時(shí)鐘是微控制器正常工作的基礎(chǔ)。
PMU_EnterSTOPMode(PMU_REGULATOR_ON,PMU_STOP_ENTRY_WFI);
在這個(gè)配置中,微控制器在STOP模式下保持電壓調(diào)節(jié)器開啟(REGULATOR_ON)。這意味著微控制器的內(nèi)核電壓在STOP模式下不會降低。盡管這會導(dǎo)致微控制器在STOP模式下消耗更多的功耗,但是從STOP模式恢復(fù)到運(yùn)行模式的喚醒時(shí)間會更短。
PMU_EnterSTOPMode(PMU_REGULATOR_LOWPOWER,PMU_STOP_ENTRY_WFI);
在這個(gè)配置中,微控制器在STOP模式下將電壓調(diào)節(jié)器置于低功耗狀態(tài)(REGULATOR_LOWPOWER)。這會降低微控制器在STOP模式下的功耗,但是從STOP模式恢復(fù)到運(yùn)行模式的喚醒時(shí)間可能會更長,因?yàn)樾枰獣r(shí)間來重新啟動電壓調(diào)節(jié)器。
WFI(Wait For Interrupt):這個(gè)指令會將微控制器置于待機(jī)模式,直到收到一個(gè)中斷信號。當(dāng)微控制器收到中斷信號后,它會退出待機(jī)模式,開始執(zhí)行中斷處理程序。這個(gè)指令通常用于情況下,微控制器無需執(zhí)行任何操作,可以等待一個(gè)特定的中斷信號,例如定時(shí)器中斷或外部硬件中斷。
WFE(Wait For Event):這個(gè)指令也會將微控制器置于待機(jī)模式,但它可以被兩種類型的信號喚醒:中斷信號和事件信號。事件信號是一種特殊類型的信號,可以由軟件設(shè)置和清除。與中斷不同的是,事件不會導(dǎo)致微控制器開始執(zhí)行一個(gè)中斷處理程序。相反,當(dāng)微控制器收到一個(gè)事件信號時(shí),它只是簡單地退出待機(jī)模式,然后繼續(xù)執(zhí)行下一條指令。這個(gè)指令通常用于微控制器需要在沒有中斷發(fā)生的情況下被喚醒,例如在多核或多線程環(huán)境中。
總的來說,WFI和WFE指令都用于將微控制器置于低功耗模式,直到收到一個(gè)信號。這兩個(gè)指令的主要區(qū)別在于它們對待喚醒信號的方式:WFI只能被中斷喚醒,而WFE可以被中斷或事件喚醒。
