STM8的AWU應用體會

AWU——STM8中的精簡RTC

  • 今天使用STM8L001進行了類似RTC定時從停止模式喚醒MCU的實驗。不知爲何,在STM8S系列部分芯片(我沒一個個去查看)和STM8L001、STM8L101等個別芯片上是沒有RTC模塊的,取而代之的是其閹割版 —— AWU模塊。

    • 因爲只能配置自動喚醒鬧鐘,沒有設置日曆的功能。
  • 這個AWU看文檔配置起來極其簡單,但實際操作起來還是有些坑的。我以實驗用的STM8L001爲例。

對AWU怎麼啓動的文檔描述

  • 文檔說第一步要測量LSI的時鐘頻率。 後面的步驟在庫文件的AWU_Init函數中都已經有了過程。

怎麼測量LSI的時鐘頻率呢?

對LSI測量文檔描述的步驟
這寫的一堆是幹嘛呢…我比較懶,就去庫文件中找了找,發現了幾個好東西。

  • stm8l10x_tim2.c中有TIM2_ComputeLsiClockFreq函數直接用於測量LSI的頻率。
  • stm8l10x_awu.c中有AWU_LSICalibrationConfig函數用於使用測得的LSI頻率配置AWU_APR寄存器
  • TIM2_ComputeLsiClockFreq的原型是:
/**
  * @brief  Compute the frequency of the LSI clock expressed in Hertz.
  * @note   The timer clock must be a high speed clock: HSI or HSE
  * @note   It is recommended to use the maximum clock frequency, that is 10 MHz,
  *         to obtain a more precise result.
  * @param  TIM2_TimerClockFreq The TIM2 clock frequency expressed in Hertz.
  * @retval LSI Clock Frequency value.
  */
uint32_t TIM2_ComputeLsiClockFreq(uint32_t TIM2_TimerClockFreq)
{
	...
}

註釋中寫明參數是:TIM2用Hz表示的時鐘頻率

  • 而剛開始我就腦抽的以爲是自己配置分頻的TIM頻率,結果怎麼傳都得不到數值。這裏應該是系統時鐘CLK_GetClockFreq函數獲得的值傳進去。

  1. TIM2_ComputeLsiClockFreq的前面需要做上圖步驟的第一步,把AWU_CSRMSR bit置有效;測量後失能MSR bit

  2. AWU_LSICalibrationConfig配置好AWU_APR寄存器。

  3. AWU_Init函數初始化AWU的喚醒間隔時間。

  4. 每次自動喚醒後都會進入INTERRUPT_HANDLER(AWU_IRQHandler,4)中斷服務函數,所以需要在這裏使用AWU_GetFlagStatus清除標誌。

  5. 使用halt函數讓MCU進入類似STOP模式,就可以等它到了設定的間隔時間自動喚醒了。

  • 這裏說一點比較坑的,我使用例程的同時,自己寫了AWU_Config()函數。由於並不知道例程的GPIO_Config()裏打開了一次全局中斷,於是我在GPIO_Config()後面加上了自己的AWU_Config()函數,開始也沒什麼問題,但調試時發現時不時出現測量的LSI頻率值在檢查參數合法性時就會報錯
    • 一直很納悶,起初以爲是測量的步驟有問題,還在上述第①步之後加了延時,發現沒有效果。
    • 於是嘗試把AWU_Config()換個地方初始化,當放到TIM4_Config()前面時調試就沒出現問題了,我又以爲是TIM4的1ms中斷引起的問題,而放到TIM4_Config()後面發現也沒問題,進去GPIO_Config()看了看終於知道了…

GPIO_Config()的過程

  • 如下圖中把對AWU的初始化放在箭頭位置都不合適,兩個地方的全局中斷都已開啓,會對LSI的測量結果有影響
    main的初始化過程
  • halt執行後的功耗消耗、留下運行的外設和支持喚醒的方式,我認爲是讓MCU進入類似STM32的STOP模式了,有沒有小夥伴有其他看法呢?可以評論中說說想法 ~,放上STM8和STM32的低功耗模式詳情表作參考。

STM8部分的Low power modes
STM8部分的Low power modes
STM32F1的Low power modes
STM32F1的Low power modes

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章