很多朋友在調試GD32 MCU的低功耗模式時會遇到一個問題:程序中讓MCU進入了Sleep、Deepsleep或者Standby模式,之后MCU就無法再下載程序了。這是因為在低功耗模式下,MCU的SW口和JTAG口是無法訪問的。比如下面的程序就會導致該問題發生:
該main函數中第一步是打開PMU時鐘,然后馬上讓MCU進入Deepsleep模式,當你想要再次下載程序時,IDE會有如下錯誤提示(不同IDE報錯不同):
遇到這種情況怎么辦呢?難道只能重新換一顆芯片了?不不不,其實有方法解決這個問題的。
方法一:
GD32 MCU的啟動模式根據芯片上的BOOT0和BOOT1腳是可以選擇三種模式:
一般情況下,BOOT0需要接地,也就是程序是從主Flash啟動的,即從用戶代碼區啟動,此時代碼會運行到進入Deepsleep的語句。如果將BOOT0拉高,再重新上電MCU,此時程序會從出廠引導裝載程序(ISP)或者片上SRAM運行,這樣就不會運行用戶代碼,也就不會再讓MCU進入低功耗了,此時通過IDE的全片擦除功能將Flash中的程序擦除掉,再將BOOT0恢復為低并重新上電后,就可以重新下載程序啦。
以聚沃東方紅開發板為例:
只需要將上圖中方框處的兩個排針用跳線帽短接,再將Flash擦除即可。
方法二:
如果板子上的BOOT0不好再接高怎么辦呢?不妨試試下面的辦法:
將MCU的NRST腳和仿真器的NRST腳相連,這樣在重新下載程序時,仿真器會先拉低NRST腳讓MCU復位,再在很短的時間內進行程序下載。但這種辦法不是每次都有效,這取決于是仿真器先進入下載狀態還是MCU先進入低功耗狀態。
一些建議:
1、在調試低功耗模式時,可以在main函數之前增加幾秒鐘的延時,這樣在復位MCU后,在MCU進入低功耗前,你可以有足夠的時間進行新的程序下載;
2、程序中設計算法,讓一些條件達到后才讓MCU進入低功耗模式,比如按鍵,這樣在復位MCU后,就可以不讓MCU進入低功耗了:
好了,今天的內容就這些,如果還沒有學廢,那就評論區聊聊吧~記得點贊收藏加關注
-
單片機
+關注
關注
6043文章
44621瀏覽量
638615 -
mcu
+關注
關注
146文章
17324瀏覽量
352658 -
GD32
+關注
關注
7文章
413瀏覽量
24475
發布評論請先 登錄
相關推薦
評論