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