燒錯固件的單片機怎麼緊急處理呢,讓老師傅來教你

2022-04-05   大方老師單片機

原標題:燒錯固件的單片機怎麼緊急處理呢,讓老師傅來教你

你是否有過燒錯固件的經歷?

STM32F1xx程序意外燒錄 STM32F4xx單片機中,或者外部晶 25M,程序設定 8 M後再燒錄到單片機中?

這樣就造成了一個後果,那就是再也沒法使用調試器連接你的單片機了。

此時,是否有方法攻克這個問題,或者說拯救你的單片機呢?

魚鷹在此介紹兩種方法:

00001.進入固件升 BOOTLOAD狀態。

此時單片機將使用內部高速晶 HSI BOOTLOAD代碼(即參照手冊寫的所自舉程序),此時的單片機肯定能夠正常運行,當然也就能夠通過調試器連接單片機了。關於這個能夠看魚鷹寫的兩篇筆記《如何拯救燒錯固件的單片機?(一)》Boot引腳引發的血案》

00001.使用復位引腳。

我們知道STM32單片機的第一條指令執行位置就在復位中斷,並且單片機沒法屏蔽該中斷,也就是說,沒論單片機處於何種狀態,它都會在復位信號到來時復位到最初始的狀態,並重新初始執行代碼。

所以假如我們能在它執行錯誤時鐘配置代碼前,利用調試器把沒問題的代碼下載進去,那麼程序就能夠正確配置時鐘了,從而正常運行代碼了。

我們能夠看看這個執行流程:

上電或復 ->進入復位中斷執 ->配置時鐘信息SystemInit-> __main

在配置時鐘前,調試器是能夠連接單片機的,所以,假如我們能搶在它之前,先 KEIL將正確的程序下載進去(必需是正確的代碼,否則又會連接不上,陷入死循環),那就能讓單片機恢復到正常狀態了。

另一種方法是,使 KEIL軟體的擦除功能,先將單片機的程序擦除,這樣單片機就沒有錯誤的代碼能夠執行了,當然前提還是使用復位信號。

但這種擦除方法,魚鷹發現成功率比較低,畢竟從復位到執行時鐘配置代碼這段時間實在是太短了,要剛好湊在這個時間點Erase按鈕還是需要一定運氣的。

所以魚鷹最近發現,一種更高效的方式是:直接使用下載按鈕,即復位後,馬上點擊下載正確的代碼。

為什麼這個比較高效呢,根據魚鷹的猜測,應該是這個命令會嘗試多次下載,這樣成功率就會高很多,畢竟是軟體的重複嘗試,比手動掐時間快得多。

還有一個問題是,為什麼晶振配置錯誤會導致單片機無法連接呢?

根據上面的錯誤配置,很大可能是使單片機處於超頻運行,導致單片機掛掉了。

魚鷹試圖解釋時鐘配置錯誤和調試模塊的關係,但通過參考手冊,並沒有找 CoreSight的時鐘來源,只能以後看看能不能有機會解惑了。

而關於單片機和調試模塊的關係,可以看看魚鷹這篇筆記《為什麼說你一定要掌 KEIL調試方法?》

我自己在今年年初錄製了一套還比較系統的入門單片機教程,想要的同學找我拿就行了免費的,私信我就可以~簡介里也有。