STM32 low power

STM32WB LPTIM counter(Timing) API

前言 在STM32中,相對較新的MCU部分型號配有LPTIM定時器。 比如:STM32F7、H7高性能MCU,STM32L0、 L4低功耗MCU,以及新推出的G0、G4系列中都配有這種LPTIM定時器。 具體哪些MCU配有LPTIM,大家可以下載對應的數據手冊查看。 本文圍繞STM32WB講述其中的LPTIM定時器。 LPTIM block diagram LPTIM的RCC和其他定時器相比較,其RCC功能更加豐富。通過上面框圖可以發現,LPTIM 可通過多個時鐘源提供時鐘。它可以由內部時鐘信號提供時鐘,內部時鐘信號可通過復位和時鐘控制器 (RCC) 在 APB、 LSI、 LSE 或 HSI 時鐘源中進行選擇。 低功耗定時器時鐘選擇問題(重要) 1、lptim_ker_ck接口內核時鐘,供lptim使用。 lptim_ker_tim接入到CLKMUX雙路選擇器的一個輸入端,另一個輸入端是LPTIM_IN1或者LPTIM_IN2的輸入。也就是說LPTIM的計數器可以選擇lptim_ker_ck,也可以選擇LPTIM_IN1或者LPTIM_IN。2、最關鍵的地方來了(1) CLKMUX多路選擇器對應的是CFGR寄存器的bit0:CKSEL用於控制內核時鐘選擇由內部時鐘源(APB時鐘或LSE、LSI和HSI等任何其他內置振盪器)提供時鐘。也可以選擇由外部時鐘源通過 LPTIM 外部 Input提供時鐘。(2) Count mode對應的是CFGR寄存器的bit23:COUNTMODE計數模式位,用於選擇 LPTIM 使用哪個時鐘源來為計數器提供時鐘。可以選擇計數器在每個內部時鐘脈衝後遞增。或者在 LPTIM 外部 Input上的每個有效時鐘脈衝後遞增。3、應用的時候,我們可以選擇(1) CKSEL = 0 , COUNTMODE = 0表示LPTIM內核時鐘使用的內部時鐘源,計數器通過內部時鐘脈計數。(2) CKSEL = 0 , COUNTMODE = 1表示LPTIM內核時鐘使用的內部時鐘源,計數器通過外部輸入脈衝計數。(3) CKSEL = 1 , COUNTMODE = x表示LPTIM內核時鐘使用的外部時鐘源,計數器通過外部輸入脈衝計數。 定時器句柄結構體LPTIM_HandleTypeDef […]

STM32WB LPTIM counter(Timing) API Read More »

Sleep Low Power Modes For STM32L4

前言 現在MCU都會被要求有節約省電,ST針對省電版本MCU推出L系列與最新的U5系列,此章節主要會介紹各個省電模式下的操作,與Sleep mode為例子會使用到的範例程式,配合客戶目前遇到問題,提點說明要點,與注意事項。(此章節也會介紹L4系列MCU) STM32L系列核心 這邊可以看到圖表L4的核心處理器已來到Core-M4能對應的運算效能也大大增加 Low-power modes summary 這邊會以L系列中常使用的L4為主作介紹,下表為L4在各狀態下哪些部分會進入休眠哪些是可以使用的(耗電流是可以達成的但控制條件與注意事項較為嚴苛) Low-power modes transitions STM32L4 Sleep mode實作 在看完上述介紹後,對於Low pow系列有比較深入認知,這邊我們來實作Low Pow Sleep mode模式 硬體注意事項 GPIO漏電問題 焊接問題 GPIO漏電問題 GPIO端口在STM32進入低功耗模式後有電荷流動。这是由於有壓差所造成的,因此在進入低功耗模式前先把各GPIO腳位拉到與外界水位相同我們可以看以下範例來協助了解 案例1:LCD模組連接MCU在進入STOP mode後功耗整板800多uA非1.6uA(代碼是相同的) 問題分析 摘除LCD模組後功耗下降至500uA 個模組都是以GPIO來控制開關 解法:GPIO在進入STOP mode前先把腳位全部拉到HIGH(LCD電為水平相同) 焊接問題 此問題其實也與GPIO問題原理雷同,主要是焊接接觸不良也會有漏電的現象 Coding撰寫 要能達到極為省電關閉部必要的Clock來源與GPIO腳位這2點是極為重要 主程式如下 參考 STM32L高性能低功耗实战设计 实验:低功耗系统设计–基于NUCLEO-L476RG SLEEP Mode in STM32F103 || CubeIDE || Low Power Mode || Current Consumption STM32超低功耗入门之低功耗运行模式

Sleep Low Power Modes For STM32L4 Read More »

Low Power PWM(Timer) API on STM32WB

前言 隨者低功號產品越來越要求,ST就推出Low power應用的MCU與相對應腳位,其中ST MCU中的L系列就是專屬的Low power的MCU,另外部分MCU也有低功耗腳位的MCU 例如F7、H7、G0、G4與WB系列,本章節會針對LPTIM這隻腳位去做詳細解說與用法切換震盪來源 LPTIM功能 LPTIM:Low-power timer,即低功耗定時器(16bit)LPTIM與一般TIM不同處主要是在除了待機模式下全部電源模式保持運行,而且沒有內部時鐘源也能運行下圖我們也可以看到L0與G0不相同,因此不同的系列LPTIM的設置會有不同需要再確認(其中WB系列與G0系列相同) 注意:CLKMUX選擇對應的是CFGR寄存器的bit0:CKSEL,用于控制内核clock選擇由内部時鐘源(APB或LSE、LSI和HSI等任何其他內部震盪器)提供。也可以選擇由外部clock源通過 LPTIM 外部 Input提供。 LPTIM特性 內部clock:LSE、 LSI、 HSI 或 APB LPTIM輸入的外部clock(在沒有LP震盪器情況可以使用脈衝計數器)其中LPTIM具有Glicth濾波器(如下圖) LPTIM_ClockConfigTypeDef定義 Source可以選擇如下 #define LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC  ((uint32_t)0x00U) #define LPTIM_CLOCKSOURCE_ULPTIM             LPTIM_CFGR_CKSEL 第一種表示LPTIM 使用內部clock(APB 或APB 或 LSE、LSI和HSI等)第二種表示LPTIM 由外部Clock通過 LPTIM 外部 Input1 提供Clock。 Timer底層配置(GPIO、Clock、中斷) HAL_LPTIM_Init就會调用HAL_LPTIM_MspInit PS:HAL_LPTIM_DeInit就會调用HAL_LPTIM_MspDeInit基本設置外還需要配置好GPIO、Clock、中斷才能完整使用,以下為配置LPTIM1使用PD13做PWM範例 小結流程 通過函数HAL_LPTIM_Init()做初始化 低功耗定時器的底層配置是通過函数HAL_LPTIM_MspInit()實現 選擇低功耗定時器支持的6種工作模式 PWM模式:使用HAL_LPTIM_PWM_Start()或 HAL_LPTIM_PWM_Start_IT() 單脈衝模式:在此模式下,當滿足條件時,輸出出可以切換高低電壓,使用HAL_LPTIM_SetOnce_Start()或 HAL_LPTIM_SetOnce_Start_IT() Encoder模式:HAL_LPTIM_Encoder_Start()或HAL_LPTIM_Encoder_Start_IT()!!注意非每個LPTIM都支持此模式!! 超時模式:HAL_LPTIM_TimeOut_Start()或 HAL_LPTIM_TimeOut_Start_IT() 計數模式:HAL_LPTIM_Counter_Start()或  HAL_LPTIM_Counter_Start_IT() 停止任何模式:用户可以通過调用相應的API來停止任何模式: HAL_LPTIM_Xxx_Stop

Low Power PWM(Timer) API on STM32WB Read More »

Shopping Cart