STM32自鎖如何解鎖?(解鎖方法)No Cortex-M SW Device Found/HardFault_Handler

在芯片鎖住的時候,我們首先要查看是那種錯誤,
正常情況下,你在Keil下載時遇到錯誤應該是這樣的

在這裏插入圖片描述
在這裏插入圖片描述
找不到Cortex™-M內核
Flash下載失敗

打開J-Link-Commander
在這裏插入圖片描述
如果是正常,則是可以找到Cortex-M3/M4內核,
在這裏插入圖片描述

如果芯片自鎖之後,會發現先是JTAG方式查找,之後SWD方式查找,最後找不到任何內核
在這裏插入圖片描述

以下問題爲J-LINK能找到芯片時的異常錯誤:

BOOT腳配置問題:對於STM32往往都有些BOOT配置腳。因爲BOOT腳的焊接或接觸不良或者BOOT引腳沒有配置正確**,導致很多問題。這種情況多表現在芯片功能時好時壞,或者部分芯片正常,部分芯片異常。

啓動文件問題:經常因爲選錯了啓動文件,導致程序無法正常運行,或者說調試時好好的,脫機運行就出鬼。這點在做不同系列芯片間移植時最容易碰到。

堆或棧越界溢出:這個也會導致芯片無法正常工作,調試時往往可能會有硬錯提示。

芯片引腳短路:這是最典型的現象,也是最常見的原因,一般不工作的時候第一反應就是檢查是否發生短路,短路引發芯片無法正常工作。

外部晶振異常:外部晶振無法正常工作也是導致芯片無法正常工作的原因,如果程序時鐘配置中沒有增加在外部晶振無法正常工作時切換到內部晶振的代碼,將導致單片機無法正常啓動,進行調試會發現代碼卡在了RCC時鐘的初始化中

數組越界操作: 數組發生越界時,便會進行錯誤,結果是程序直接卡死

中斷處理錯誤: 同樣會導致單片機卡死

單片機發生程序異常時,會進入到HardFault_Handler中斷

解決方法:

在這裏插入圖片描述
在硬件中斷函數HardFault_Handler裏的while(1)處打調試斷點,程序執行到斷點處時點擊“STOP”停止仿真

在這裏插入圖片描述
在這裏插入圖片描述
在Keil菜單欄點擊“View”——“Call Stack Window”
彈出“Call Stack + Locals”對話框。然後在對話框中右鍵選擇“Show Caller Code”,就會跳轉到出錯之前的函數處,仔細查看這部分函數被調用或者數組內存使用情況
在這裏插入圖片描述

以下問題爲J-LINK找不到芯片時的異常錯誤:

自鎖原因:

STM32單片機一般的連接方式是**主閃存存儲器(flash)**啓動模式,即BOOT0爲0,這樣在用JTAG或SWD寫進程序的時候,如果該程序工程中芯片選型不正確或着程序中複用了JTAG或SW複用引腳導致程序執行後出現啓動配置錯誤或者調試引腳被佔用而引起的芯片鎖死或Jlnk連接不上的問題,

時鐘問題:時鐘頻率設置太高,配置超出芯片主頻工作範圍,導致單片機自鎖

電源問題:供電電壓不穩,STM32內部存在保護檢測,同樣會進行芯片的自鎖

解決方法:

把BOOT0和BOOT1跳成1和0,(這時候就看下Jlink應該可以找到芯片),讓內部程序不運行,然後再重新下載另外的程序,再改回BOOT設置,便可以恢復正常。如果板子上JTAG和SW調試電路都有的話,在其中一種方式導致鎖死的情況下可以用另一種方式擦除恢復,而不必調整BOOT設置。
在這裏插入圖片描述

在這裏插入圖片描述
簡單的說 : 正常的芯片自鎖,就是將Flash存儲進行讀寫保護,使得不能運行程序,而我們的做法就是將BOOT0置高,使程序從系統存儲器啓動,找到芯片之後,重新往Flash中下載一個正常的代碼,之後再換回Flash啓動,芯片即可完成解鎖

如果即可以JTAG下載又可以SWD下載,假設SWD方式鎖了,可以換成JTAG下載方式然後下載正常程序,同樣可以解鎖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章