ST的低功耗模式沒有NXP那么多種,大類有5類:1、睡眠模式,2、低功耗運行模式3、低功耗睡眠模式4、停止模式 5、待機模式我看了一下,1、2、3類功耗偏高,不適合目前使用,第5類等于喚醒芯片復位,SRAM數據都不能保存,IO狀態也不能保證,這個也用不了,適合這個項目的就是第4、停止模式,手冊上標注停止模式最低0.8uA,這個比一般的MCU低多了,完全夠用了,如下圖:
(2)低功耗調試經驗常規經驗(這個是參考前輩的經驗):
1、外設時鐘必須切換為內部時鐘;
2、不用的外設全部關閉,要用再開就是了;
3、浮空引腳必須配置為下拉;這個直接在STM32cube軟件里面配置就行了
4、硬件上的上拉、下拉電阻切記不能隨便加,使用到的外圍芯片也要注意功耗問題;外圍的功能供電須加mos管做開關。
5、對進入低功耗有好幾種情況可以選擇(睡眠、停機、待機),不同模式喚醒機制略有不同;6、你需要一個測試過的低功耗的DEMO,測試硬件上的問題或移植到你的工程,這是最靠譜的;這次是第一次使用ST的L系列,直接參考手冊做的電路,焊接的時候,專門留了一塊板子,外圍功能器件不焊接,只焊接MCU和芯片周圍的器件直接做了一塊最小系統板用了調試功耗,這個是我的習慣,一般做一個新項目,新MCU的話,會焊一塊最基本的板子,用來調功耗。然后找到官方的低功耗例程,來驗證,這次開始功耗特別大,燒官方的例程也有300多uA,后來檢查電路,發現BOOT0的電平可選擇電阻選擇有問題,太小了,換了一個10M之后,功耗立馬降到3uA,這個基本上夠用了,待機電流也不是越低越好,現在的一次性鋰亞電池,做的容量都很大,待機電流太小,如果采集周期也很長的話,容易照成電池鈍化,也會影響使用周期。
(3)STM32CUBE使用經驗分享1. 新建一個工程第一步肯定是下載軟件,這個就不多說了,找官方下載就行了,對應的L系列還需要安裝一個軟件包,之前用了F429,這次試用L053又下載了一個安裝包。雙擊打開這個軟件
打開之后選擇新建一個工程:
等待軟件加載一些功能之后,選擇你的MCU
找到你的MCU之后,雙擊它就行了
就出現了我們可以配置的界面,下面就是我們選擇的MCU:
具體的使用大家慢慢摸索,哈哈。使用這個STM32cube軟件,也沒有像官方說的那樣,新手也能用好,我感覺完全的新手估計夠嗆,起碼時鐘樹就很難理解,之前搞飛思卡爾,也就是現在的NXP的,都是看寄存器手冊然后對照例程學習,想一步到位估計夠嗆。有些經驗的,使用這個軟件配置初始化還比較合適,各項功能很清晰。
2. 配置我們需要的IO口和功能按照具體的項目配置IO口和功能,下圖是我最近這個項目用到的,3個串口,一個ADC監視電池電壓,5個按鍵中斷,然后還有一些IO控制,內部的EEPROM,RTC定時器和硬件看門狗。
本來也可以用內部HSI,我擔心頻率不那么精準,串口通訊波特率可能會有些問題,還是加了一個外部8M晶振,配置一下時鐘樹。
配置完之后生成代碼,選著保存的目錄等等
還有一個自動配置未使用的IO 為輸入狀態
3. 在低功耗前提下各個功能程序處理經驗在低功耗前提下,使用各個功能,就要做到,用到打開,用完立即關閉。以采集電池電量為例,
如下
u16 Get_VBat(void)
{
float temp;
u16 BATTER_VALUE,VREFINT_CAL;
u16 Ref_Vol;
u16 Vdc;
MX_ADC_Init(); //重新初始化
BATTER_VALUE = GET_ADC(ADC_CHANNEL_0);
Ref_Vol = GET_ADC(ADC_CHANNEL_VREFINT);
printf("電池:%d\r\n",BATTER_VALUE);
printf("基準:%d\r\n",Ref_Vol);
BATTER_VALUE = 2*BATTER_VALUE;
temp=((float)BATTER_VALUE/Ref_Vol)*1.24;
Vdc = (u16)(temp*1000);
printf("Vdc=%u\r\n",Vdc);
HAL_ADC_DeInit(&hadc); //關閉ADC采集
return Vdc;
}
使用ADC重新初始化,用完之后馬上關閉。
4. 低功耗實現命令低功耗命令實際就一句話就行了,再加上喚醒配置和暫停系統時鐘中斷。STM32系統自動就把時鐘重新選擇了,不需要我們自己弄,這個比較方便,之前做NXP的每一項低功耗對時鐘都有要求,進之前要自己切換時鐘才行,不然可能會報錯。在停止模式下,VCORE 域中的所有時鐘都會停止,PLL、MSI、HSI16 和 HSE RC 振蕩器也被禁止。內部 SRAM 和寄存器內容將保留。具體函數如下:
HAL_SuspendTick(); //掛起(暫停)系統時鐘中斷
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); //0.75ma WFI任意中斷喚醒 WFE喚醒事件
HAL_ResumeTick(); // /*喚醒之后恢復系統時鐘中斷 */STOP模式LPUART1和任意的外部中斷,RTC中斷都可以喚醒,喚醒之后需要重新初始化系統時鐘,才能保證你的功能正常運行。總結:整體來說STM32L053的體驗還不錯,功耗也很低,整體這個項目畫板子焊接調試2周多的時間就基本上搞定,目前搞了幾臺設備到現場去測試了,大功能沒啥問題,哈哈。這個項目使用的功能不多,主要就是串口和低功耗,然后使用了內部的EEPROM保存一些關鍵參數,希望能給大家一點有用的幫助。