【STM32L053】使用STM32CUBE軟件開發(fā)低功耗設(shè)備一些經(jīng)驗(yàn)分享
網(wǎng)站:21ic.com
(1)更換ST平臺背景
最近NXP的芯片買不到了,之前產(chǎn)品都是使用NXP是L系列做低功耗應(yīng)用,現(xiàn)在訂貨交期都是50周往上,買散料一片喊出來的價(jià)格300 ,這個(gè)價(jià)格令人望而生畏,太過分了,哈哈。
沒辦法只能切平臺了,之前搞了一批GD的片子回來,做了一個(gè)項(xiàng)目,但是那個(gè)項(xiàng)目不需要低功耗,有電源適配器供電,不需要考慮功耗問題,手上這個(gè)新項(xiàng)目電池供電,GD就沒辦法用了,只能讓采購搞點(diǎn)ST回來試試,選了ST的L系列,哈哈,ST的花點(diǎn)錢還是能搞到貨。ST的低功耗模式?jīng)]有NXP那么多種,大類有5類:1、睡眠模式,2、低功耗運(yùn)行模式3、低功耗睡眠模式4、停止模式 5、待機(jī)模式。
我看了一下,1、2、3類功耗偏高,不適合目前使用,第5類等于喚醒芯片復(fù)位,SRAM數(shù)據(jù)都不能保存,IO狀態(tài)也不能保證,這個(gè)也用不了,適合這個(gè)項(xiàng)目的就是第4、停止模式,手冊上標(biāo)注停止模式最低0.8uA,這個(gè)比一般的MCU低多了,完全夠用了,如下圖:

(2)低功耗調(diào)試經(jīng)驗(yàn)
常規(guī)經(jīng)驗(yàn)(這個(gè)是參考前輩的經(jīng)驗(yàn)):
1、外設(shè)時(shí)鐘必須切換為內(nèi)部時(shí)鐘;2、不用的外設(shè)全部關(guān)閉,要用再開就是了;3、浮空引腳必須配置為下拉;這個(gè)直接在STM32cube軟件里面配置就行了4、硬件上的上拉、下拉電阻切記不能隨便加,使用到的外圍芯片也要注意功耗問題;外圍的功能供電須加mos管做開關(guān)。5、對進(jìn)入低功耗有好幾種情況可以選擇(睡眠、停機(jī)、待機(jī)),不同模式喚醒機(jī)制略有不同;6、你需要一個(gè)測試過的低功耗的DEMO,測試硬件上的問題或移植到你的工程,這是最靠譜的;
這次是第一次使用ST的L系列,直接參考手冊做的電路,焊接的時(shí)候,專門留了一塊板子,外圍功能器件不焊接,只焊接MCU和芯片周圍的器件直接做了一塊最小系統(tǒng)板用了調(diào)試功耗,這個(gè)是我的習(xí)慣,一般做一個(gè)新項(xiàng)目,新MCU的話,會焊一塊最基本的板子,用來調(diào)功耗。
然后找到官方的低功耗例程,來驗(yàn)證,這次開始功耗特別大,燒官方的例程也有300多uA,后來檢查電路,發(fā)現(xiàn)BOOT0的電平可選擇電阻選擇有問題,太小了,換了一個(gè)10M之后,功耗立馬降到3uA,這個(gè)基本上夠用了,待機(jī)電流也不是越低越好,現(xiàn)在的一次性鋰亞電池,做的容量都很大,待機(jī)電流太小,如果采集周期也很長的話,容易照成電池鈍化,也會影響使用周期。
(3)STM32CUBE使用經(jīng)驗(yàn)分享
1. 新建一個(gè)工程
第一步肯定是下載軟件,這個(gè)就不多說了,找官方下載就行了,對應(yīng)的L系列還需要安裝一個(gè)軟件包,之前用了F429,這次試用L053又下載了一個(gè)安裝包。
雙擊打開這個(gè)軟件?


打開之后選擇新建一個(gè)工程:

等待軟件加載一些功能之后,選擇你的MCU:

找到你的MCU之后,雙擊它就行了:

就出現(xiàn)了我們可以配置的界面,下面就是我們選擇的MCU:

具體的使用大家慢慢摸索,哈哈。
使用這個(gè)STM32cube軟件,也沒有像官方說的那樣,新手也能用好,我感覺完全的新手估計(jì)夠嗆,起碼時(shí)鐘樹就很難理解,之前搞飛思卡爾,也就是現(xiàn)在的NXP的,都是看寄存器手冊然后對照例程學(xué)習(xí),想一步到位估計(jì)夠嗆。有些經(jīng)驗(yàn)的,使用這個(gè)軟件配置初始化還比較合適,各項(xiàng)功能很清晰。
2. 配置我們需要的IO口和功能
按照具體的項(xiàng)目配置IO口和功能,下圖是我最近這個(gè)項(xiàng)目用到的,3個(gè)串口,一個(gè)ADC監(jiān)視電池電壓,5個(gè)按鍵中斷,然后還有一些IO控制,內(nèi)部的EEPROM,RTC定時(shí)器和硬件看門狗。

本來也可以用內(nèi)部HSI,我擔(dān)心頻率不那么精準(zhǔn),串口通訊波特率可能會有些問題,還是加了一個(gè)外部8M晶振,配置一下時(shí)鐘樹。

配置完之后生成代碼,選著保存的目錄等等

還有一個(gè)自動配置未使用的IO 為輸入狀態(tài)

3. 在低功耗前提下各個(gè)功能程序處理經(jīng)驗(yàn)
在低功耗前提下,使用各個(gè)功能,就要做到,用到打開,用完立即關(guān)閉。以采集電池電量為例,如下
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("基準(zhǔn):%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(