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