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

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

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

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