AWU是STM32中沒(méi)有的功能
寫在前面 Ⅰ
在某些低功耗的設(shè)備中,需要設(shè)備進(jìn)入低功耗,且又需要間隔一定時(shí)間喚醒MCU,就需要有這么一個(gè)定時(shí)“AWU自動(dòng)喚醒”的功能。
在STM32中實(shí)現(xiàn)上面功能,常見的操作就是使用RTC來(lái)實(shí)現(xiàn)。但RTC每次進(jìn)入低功耗之前都需要配置一下RTC,而STM8獨(dú)特的AWU功能只需要簡(jiǎn)單的初始化配置即可。
為方便大家閱讀,本文內(nèi)容已經(jīng)整理成PDF文件:
http://pan.baidu.com/s/1i5uWhJR
AWU基礎(chǔ)知識(shí) Ⅱ
AWU:Auto WakeUp,即自動(dòng)喚醒
AWU是用來(lái)當(dāng)MCU進(jìn)入低功耗的活躍停機(jī)(Active Halt)模式時(shí)提供一個(gè)內(nèi)部的喚醒時(shí)間基準(zhǔn)。該時(shí)間基準(zhǔn)的時(shí)鐘是由內(nèi)部的低速RC振蕩器時(shí)鐘(LSI)或者通過(guò)預(yù)分頻的HSE晶振時(shí)鐘來(lái)提供的。
LSI低速內(nèi)部時(shí)鐘測(cè)量
在使用LSI低速內(nèi)部時(shí)鐘時(shí),為了確保最好的精度,它的頻率可以通過(guò)TIM3的輸入捕捉1來(lái)測(cè)定。
AWU操作
為了使用AWU功能,按順序執(zhí)行如下步驟:
1. 使用AWU_CSR寄存器的MSR位和TIM1/3的輸入捕捉通道1來(lái)檢測(cè)LS的時(shí)鐘頻率(對(duì)精度要求不高,該步驟可省略);
2. 通過(guò)寫AWU_APR的APR[5:0]位來(lái)定義適當(dāng)?shù)念A(yù)分頻值;
3. 通過(guò)寫AWU_TBR的AWUTB[3:0]來(lái)選擇需要的自動(dòng)喚醒延時(shí);
4. 置位AWU_CSR 的AWUEN位;
5. 執(zhí)行HALT指令。
提示:
計(jì)數(shù)器僅僅在HALT指令之后MCU進(jìn)入活躍停機(jī)模式時(shí)才開始計(jì)數(shù)(請(qǐng)參考電源管理的活躍停機(jī)模式章節(jié)), AWU中斷同時(shí)被使能。
預(yù)分頻計(jì)數(shù)器僅僅在APR[5:0]值不同于它的復(fù)位值0x3F值時(shí)才開始計(jì)數(shù)。
LSI低速內(nèi)部時(shí)鐘頻率檢測(cè)
在經(jīng)過(guò)出廠校驗(yàn)后,在全溫度范圍內(nèi)低速內(nèi)部RC(LSI)振蕩器的頻率離散性是128 kHz +/-12.5%。為了獲得精確的AWU時(shí)間間隔或者蜂鳴器輸出,必須精確測(cè)量LSI頻率。本文提供的兩個(gè)工程代碼中有一個(gè)是校正過(guò)的,有一個(gè)沒(méi)有校正。
可采用如下的步驟:
1. 將AWU_CSR的MSR位置1來(lái)把LSI的內(nèi)部時(shí)鐘連接到TIM1/3定時(shí)器的ICAP1;
2. 通過(guò)定時(shí)器的輸入捕捉中斷來(lái)測(cè)量LSI的時(shí)鐘頻率;
3. 到向AWU_APR的 APR [5:0] 位寫入一個(gè)適當(dāng)?shù)闹祦?lái)調(diào)整AWU定時(shí)間隔到期望的時(shí)間間隔。AWUTB[3:0]位可以被更改來(lái)選擇不同的時(shí)間間隔。
軟件工程源代碼 Ⅲ
1、關(guān)于工程
本文提供的工程代碼是基于前面軟件工程“STM8S_Demo”增加AWU修改而來(lái)。初學(xué)的朋友可以參看我前面對(duì)應(yīng)的基礎(chǔ)文章,那些文章講的比較詳細(xì)。
工程源代碼主要實(shí)現(xiàn)功能:配置AWU定時(shí)1秒,讓MCU從停機(jī)模式自動(dòng)喚醒,改變LED狀態(tài);然后又進(jìn)入停機(jī)模式,以此循環(huán)下去。
本文重點(diǎn)講述關(guān)于AWU的內(nèi)容:
AWU_LSICalibrationConfig:LSI低速內(nèi)部時(shí)鐘校正配置
AWU_Init:AWU初始化配置
2.代碼分析說(shuō)明
A.AWU_LSICalibrationConfig:時(shí)鐘校正配置
關(guān)于時(shí)鐘的校正,如果要求不是很高,可以省略該步驟。從上面的說(shuō)明可以看得出來(lái),是通過(guò)定時(shí)器來(lái)實(shí)現(xiàn)的。
我們提供例程通過(guò)TIM1/3捕獲功能(該功能在后面文章會(huì)講述)測(cè)量LSI的時(shí)鐘,具體請(qǐng)看我提供例程的“AWU_LSIMeasurement”函數(shù),該函數(shù)測(cè)量得到的LSI時(shí)鐘,結(jié)合“AWU_LSICalibrationConfig”函數(shù)即可校正。
B.AWU_Init(AWU_TIMEBASE_1S):定時(shí)1秒AWU
通過(guò)上面的描述,大家或許初學(xué)的朋友還不能完全理解(上面的描述是針對(duì)寄存器的描述),但可以通過(guò)代碼很直接的明白其意思,我們這里結(jié)合的是ST提供的標(biāo)準(zhǔn)外設(shè)庫(kù),具體可以跟蹤代碼看見,其實(shí)里面的內(nèi)容就是上面所描述的。
void AWU_Initializes(void)
{
AWU_LSICalibrationConfig(AWU_LSIMeasurement());
AWU_Init(AWU_TIMEBASE_1S);
enableInterrupts();
}
提示:
很多人不明白為什么這里要配置中斷?
其實(shí)細(xì)心的朋友會(huì)發(fā)現(xiàn)寄存器“控制/狀態(tài)寄存器 (AWU_CSR)”中的“AWUEN自動(dòng)喚醒使能位”,這一位的功能如下:
此位由軟件置位和清零。由此位使能自動(dòng)喚醒功能。如果MCU進(jìn)入Active-halt或 Wait 模式,則自動(dòng)喚醒模塊按照預(yù)先編程設(shè)置延時(shí)一段時(shí)間喚醒MCU。
0:禁止自動(dòng)喚醒功能
1:使能自動(dòng)喚醒功能
因此,我們還需要在中斷函數(shù)(stm8s_it.c)里添加代碼:
INTERRUPT_HANDLER(AWU_IRQHandler, 1)
{
AWU_GetFlagStatus();
}
這一句主要的功能是清除標(biāo)志位。
下載 Ⅳ
STM8S資料:
http://pan.baidu.com/s/1o7Tb9Yq
軟件源代碼工程(STM8S-A06_AWU自動(dòng)喚醒xxx):
http://pan.baidu.com/s/1c2EcRo0
-
Auto
+關(guān)注
關(guān)注
0文章
42瀏覽量
15277 -
PDF
+關(guān)注
關(guān)注
1文章
168瀏覽量
33691 -
STM8S
+關(guān)注
關(guān)注
16文章
149瀏覽量
31407
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論