這幾天學了 stm32 的 BKP,RTC 和 PWR,單片機學習基本進入尾聲了,後面只剩下個看門狗還有個 flash 了。
那麼開始今天的學習筆記。
(一)PWR#
我們先講 PWR,因為後面的 BKP 和 RTC 都要開啟 PWR 時鐘,調用一些 PWR 功能。
什麼是 PWR 呢?
PWR 就是電源控制(Power Control),負責管理 STM32 內部的電源供電部分,可以實現可編程電壓監測器和低功耗模式的功能,可編程電壓監測器(PVD)可以監控 VDD 電源電壓,當 VDD 下降到 PVD 閾值以下或上升到 PVD 閾值之上時,PVD 會觸發中斷,用於執行緊急關閉任務。(PVD 功能還沒用過)
低功耗模式包括睡眠模式(Sleep)、停機模式(Stop)和待機模式(Standby),可在系統空閒時,降低 STM32 的功耗,延長設備使用時間。
其配置過程如下:
標準庫裡的 PWR 函數功能已經相當完整,操作起來簡直不要太簡單。
只需要先啟動 PWR 時鐘(睡眠模式甚至不需要啟動時鐘):
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
然後我們調用如下函數進入相應的模式:
睡眠模式:__WFI();
停止模式:PWR_EnterSTOPMode();
待機模式:PWR_EnterSTANDBYMode();
需要注意的是進入低功耗模式後不能直接燒錄程序,需要按住復位鍵再燒錄程序並及時鬆開復位鍵。
(二)BKP#
江科大視頻裡提到過 TAMPER,但我們寫代碼的時候沒用過,這裡不討論,我們只需要寫 BKP 的儲存並且掉電不丟失就可以了。
這裡是 BKP 的結構:
VBAT 就是備用電源引腳,BKP 的掉電不丟失就是因為這個引腳供電。
代碼如下:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
開啟時鐘
PWR_BackupAccessCmd(ENABLE);
開啟備用電源
BKP_WriteBackupRegister();
寫入
BKP_ReadBackupRegister();
讀出
(三)RTC#
使用 RTC 我們需要先理解 Unix 時間戳,還要學一些 <time.h> 的函數。
理解這些之後我們再來看 RTC
RTC 結構如下:
這裡注意時鐘源,一般選 LSE 外部低速時鐘,32.768kHz 的晶振,不過這玩意可能會不起振動(經常可能),我配置的時候用的 LSI,晶振頻率 40kHz。
還有,RTC 時鐘配置需要注意一下幾點:
下面是配置代碼,順便完成了時間戳的轉換:
那麼這些就是 BKP,RTC,PWR 的全部內容,潤了潤了(越寫越懶了,悲)。