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