新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32低功耗實(shí)驗(yàn)總結(jié)

STM32低功耗實(shí)驗(yàn)總結(jié)

作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
STM32低功耗實(shí)驗(yàn)總結(jié)
1、首先回答一個(gè)問題,STM32能不能做低功耗?
回答是肯定的,這個(gè)是有數(shù)據(jù)支持的,我測(cè)試的STM32101CB,F(xiàn)LASH:128K,RAM:16K并且RTC工作的情況下,測(cè)試到的功耗為16uA應(yīng)該說還是相當(dāng)不錯(cuò)的。
2、STM32低功耗有哪些需要注意的地方?
一開始我測(cè)試到STM32為16uA的時(shí)候,還是非常高興的,以為真的可以做為我的應(yīng)用,我的應(yīng)用是讓MCU定時(shí)醒來干活,干一會(huì)就睡覺,可能干活的時(shí)間就幾十個(gè)毫秒??墒呛髞戆l(fā)現(xiàn)有些問題(工作在STOP模式):
1)時(shí)鐘問題:STM32被喚醒以后的時(shí)鐘自動(dòng)切換到內(nèi)部HIS RC振蕩器,大家都是知道的,RC振蕩器的精度是不高的。而且,睡覺前對(duì)于時(shí)鐘的設(shè)置都是恢復(fù)到復(fù)位狀態(tài),只是時(shí)鐘這個(gè)地方復(fù)位,其他的沒有。這也會(huì)帶來一個(gè)問題,可能你睡覺前使用的是內(nèi)部時(shí)鐘,可是睡覺后,時(shí)鐘卻變了,帶來的問題就是UART和定時(shí)器?;蛟S你想不使用PLL,就是8M,這樣醒來后的時(shí)鐘HIS也是8M,這樣雖然在時(shí)鐘上沒有差別了,但是時(shí)鐘卻不穩(wěn)定了。UART波特率肯定不能太高,否則通信會(huì)有問題。
2)醒來時(shí)間:這個(gè)問題也是個(gè)非常大的問題,datasheet上給出的醒來時(shí)間是7us,這個(gè)可能真的不假,但是醒來,不能馬上干_你的活,為什么。初始化IO,你可能問,我不初始化不行嗎,回答應(yīng)該是否定的。因?yàn)?,如果你想使用低功耗的話,睡覺前IO口都應(yīng)該設(shè)置為模擬輸入,這樣才能達(dá)到datasheet上的14uA,但是這樣也帶來一個(gè)問題,那就是初始化IO,醒來必須要初始化IO。如果你還想把時(shí)鐘切換到外部時(shí)鐘,耗時(shí)會(huì)更加長(zhǎng),接近200ms,因?yàn)镾TM32會(huì)等待外部時(shí)鐘穩(wěn)定后才能工作,然后還要在重新初始化所有IO,這個(gè)非常的耗時(shí)。可能我只需要醒來10ms,但是這些活干完就需要100ms。
3)RTC喚醒:RTC這個(gè)也是個(gè)問題,為什么?大家需要注意的是RTC只能使用報(bào)警才能喚醒MCU,秒中斷是不可以喚醒的。并且報(bào)警中斷必須不停的設(shè)置,設(shè)置一次只生效一次,中斷完了,還需要設(shè)置下次中斷的時(shí)間。并且還有個(gè)問題,報(bào)警中斷必須等待到秒中斷到了之后才能設(shè)置,也就是正好秒寄存器更新了一次的時(shí)候設(shè)置,這就帶來一個(gè)問題,等待秒中斷。如果睡前還想再能被報(bào)警喚醒的話必須重新設(shè)置報(bào)警中斷,而且設(shè)置報(bào)警中斷的時(shí)候需要等到秒中斷才能設(shè)置新的值。這個(gè)等待的時(shí)間是不定的??赡軙?huì)幾百個(gè)毫秒。說以要空空的耗費(fèi)幾百個(gè)毫秒等到秒中斷標(biāo)志來設(shè)置報(bào)警中斷??赡芪业腗CU只需要執(zhí)行10ms就需要睡覺了。還是要空空的耗費(fèi)掉幾百個(gè)毫秒
總結(jié):在使用的過程中發(fā)現(xiàn)的問題,我都在上面說明了,我覺得STM32的低功耗太假,雖然在睡眠的時(shí)候性能不錯(cuò),但是醒來,和進(jìn)入睡眠的設(shè)置太麻煩,耗時(shí)太多,這是個(gè)弊端,我覺得MSP430估計(jì)是做的最好的了,即使是AVR也比他好點(diǎn),沒有那么麻煩。


評(píng)論


技術(shù)專區(qū)

關(guān)閉