MDK KEIL 烧录STM32下载错误:Flash Timeout.Reset the Target and try it again.解决办法(芯片解锁 解除读报护)
使用keil開發STM32點下載時出現下面的報錯:
點確定后:
出現如上情況很可能是該芯片鎖死,即設置了讀寫保護。
解決方法是想辦法解鎖芯片,可以使用ST-Link配合stlink utility軟件,或者使用J-link,或者用一個自動取消讀寫保護位的程序在SRAM區運行一下(讀寫保護只影響 FLASH, SRAM調試時程序下載到 SRAM 中,不受影響) 。當然其實上面的方法原理都是一樣,下面就使用ST-Link配合stlink utility軟件解鎖芯片的方法闡述一下。
stlink utility是ST官方提供的免費軟件,支持STM32 ST-LINK的程序包括帶有命令行界面(CLI)的圖形用戶界面(GUI)。該軟件可自行到ST官網搜索下載最新版。
進入stlink utility軟件后,Target->Connect顯示不能讀到flash,這也進一步證明這個芯片被設置了讀報護。如果到這一步依然與圖片現象一致,那么請繼續往下跟著操作。
選擇Target->Option Bytes
讀到配置字節發現讀報護果然被使能了:
將Read Out Protection選項設置位disable,點擊Apply,這時候Flash已經成功解鎖了:
解鎖成功后ST-LINK上位機軟件會自動連接芯片,這時發現flash已經全部被擦除了(因為flash讀出來都是0xFFFFFFFF),這就是芯片的保護機制,主要防止一些想不勞而獲的人通過調試器竊取芯片內的軟件。
至此,芯片已經可以正常燒錄了。
補充一點:
有些芯片比如L0系列的,Read Out Protection選項讀出來是Level 0或是 Level 1
STM32 讀保護有三個等級 L0 L1 L2
L0 是沒有保護,可以隨意讀出來的,一般調試過程中選擇。在L0 狀態可以設置成L1 或者L2,修改完成不會擦除芯片已有的代碼;
L1 是可恢復讀保護,L1–>L0狀態,,會自動擦除已有的程序。L1->L2,這個設置還沒有試過,(正常理解是不擦除);
L2 是不可恢復讀保護,此狀態下,不可恢復到其他的狀態,同時芯片里的程序不能再升級 類似OTP了;
這個主要是保護代碼不會被其他人惡意拷貝,保護原作者的權益。
如果是這種。解鎖的時候把Level 1切換到Level 0就行了。
這里注意。自己調試時不要設到Level 2去了,這樣芯片就再也不能燒錄新程序了。
再補充一點:
如果按上面的方法解鎖了之后,再用KEIL下載還是反復報下面的錯誤:
換ST-link utility燒錄時報下面的錯誤:
這個原因是上述方法沒有解鎖全部的Flash,還有一部分Flash沒有解鎖。是因為前幾頁flash單獨設置了讀報護,需要單獨解鎖。
選擇Target->Option Bytes
發現如上圖所示前4頁flash被寫保護,所以需要將其全部解鎖才能下載。
(該部分寫保護主要是為了Bootloader被破壞)
點擊Unselect all,再點擊Apply即可解除所有的讀報護了。
總結
以上是生活随笔為你收集整理的MDK KEIL 烧录STM32下载错误:Flash Timeout.Reset the Target and try it again.解决办法(芯片解锁 解除读报护)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言面试题分享(5)
- 下一篇: STM32开启定时器就立即进Update