整理:Miler Shao
對于STM8S系列或STM8L101系列芯片的低功耗模式中,有個活躍停機模式[Active Halt],可以使用AWU中斷喚醒。

從上表可以看出,活躍停機模式[Active Halt]有兩種情形,細節(jié)這里就不延伸了,反正都可以
通過AWU 或外部中斷喚醒。下面主要就AWU及其應(yīng)用作些基本的介紹。
此處所說的 AWU,是指STM8S芯片內(nèi)部的一個外設(shè)單元,叫自動喚醒單元[Auto Wake up Unit]。
是用來當(dāng)STM8S芯片進入低功耗的活躍停機模式[ACTIVE HALT MODE]時提供一個內(nèi)部的喚醒時
間基準。該時間基準的時鐘源來自LSI或者分頻過的HSE。自進入活躍停機休眠模式起,每經(jīng)過喚
醒時間基準單位后,便利用AWU中斷喚醒MCU。 事后根據(jù)HALT指令再次進入活躍停機模式,如
此往復(fù)循環(huán)。
當(dāng)使用LSI時,為了保障盡可能高的時間精度,它的頻率可以通過TIMER3或TIMER1的輸入
捕捉進行測定。具體用那個 TIMER要看具體的數(shù)據(jù)手冊。下面是AWU的時鐘框圖:

AWU的時鐘源可以是LSI或者是經(jīng)過分頻后的HSE,得到的Fls,可以進行預(yù)分頻,之后
給AWU計數(shù)器進行計數(shù)。
其中預(yù)分頻系數(shù)由AWU_APR寄存器中的 APR[5:0]決定,最大64分頻;那AWU計數(shù)器的
計數(shù)個數(shù)由AWU_TBR寄存器中的 AWU_TB[3:0]決定,分為15個時基,是它最終決定喚醒
延時的時間長度。最長時間為 64*30*2048個AWU的 Fls脈沖所占時間,如果以Fls 128K來
算,最長時間約為30.72s 。
AWU的操作步驟如下:

第1步 意思很清楚了,上面提過。
第2、3 步是為了設(shè)定從進入休眠到喚醒的時間長度,即設(shè)置喚醒時基。
第4步是使能AWU 喚醒功能。
第5步就是發(fā)布讓STM8S MCU 進入活躍停機模式的指令。
關(guān)于AWU喚醒時間的計算
上面提到過了,跟2個寄存器有關(guān),分別是AWU_APR寄存器中的 APR[5:0]和AWU_TBR中的AWU_TB[3:0]。
APR[5:0]負責(zé)對AWU的時鐘源進行分頻,然后給AWU的計數(shù)器計數(shù)。AWU_TB[3:0]負責(zé)控制AWU計數(shù)器
記多少個脈沖,一共有15個數(shù)據(jù)檔,不同的檔對應(yīng)不同的計數(shù)個數(shù)。
由于寄存器設(shè)置數(shù)據(jù)本身具有一定離散性和2個寄存器數(shù)據(jù)有可能有多種乘積組合,不難理解,對于具體的
喚醒間隔,這2個寄存器的參數(shù)有個最佳組合問題,原則是盡可能靠近你所希望的時間間隔。關(guān)于這點,ST
官方參考手冊有示例說明,可以借鑒參考。
最后溫馨提醒:
1、AWU的時鐘源Fls,是通過對CKAWUSEL選項位編程選擇,經(jīng)常有人找不到位置;
2、AWU的計數(shù)器只有在HALT指令之后 且MCU進入活躍停機模式時才開始計數(shù),與此同時并使能AWU中斷。
3、AWU_APR寄存器中的 APR[5:0]的系統(tǒng)復(fù)位后的默認值是0x3f,切不可順手就使用該
默認值,否則AWU的計數(shù)器不工作。這點也的確有人在此流連忘返過。
4、接著第2點羅嗦下,當(dāng)MCU回到運行模式時AWU是停止計數(shù)工作的。當(dāng)再次進入活躍停機模式時重新初始化
并開始計數(shù)延時。