天天看點

STM32 使用st-link調試遇到寫保護 Flash Timeout 問題的解決思路

本文介紹了如何解決STM32晶片Flash寫保護導緻無法下載下傳程式,無法線上調試的問題;如果您遇到相同的問題,希望本文可以帶來一些幫助;

如果本文幫到了您,請幫忙點個贊 👍👍👍;

如果本文幫到了您,請幫忙點個贊 👍👍👍;

如果本文幫到了您,請幫忙點個贊 👍👍👍;

文章目錄

    • 1 FLASH的寫保護
    • 2 錯誤提示
    • 3 stlink utility
      • 3.1 基本功能
      • 3.2 解鎖Flash
      • 3.3 寫保護
    • 4 總結

1 FLASH的寫保護

如果對Flash設定了寫保護,那就無法對Flash進行程式設計和擦除。在開發STM32的時候,如果出現這種情況,通常仿真器都支援對Flash進行解鎖,像jlink,stlink等仿真器都支援這個功能。

2 錯誤提示

在使用MDK進行調試的時候,出現報錯 Flash Timeout.Reset Target and try it again,具體如下圖所示;

STM32 使用st-link調試遇到寫保護 Flash Timeout 問題的解決思路

折騰了一番之後,并沒有解決問題,因為使用的仿真器是stlink,是以下載下傳了stlink utility嘗試解決問題;

3 stlink utility

3.1 基本功能

stlink utility是ST官方提供的免費軟體,支援STM32 ST-LINK的程式包括帶有指令行界面(

CLI

)的圖形使用者界面(

GUI

)。

該工具還提供了較多的其他功能,具體如下;

  • 可以對STM32 内部存儲器 (Flash,RAM,OTP和其他存儲器),外部存儲器進行程式設計;
  • 驗證程式内容(校驗和,在程式設計期間和之後進行校驗,與檔案進行比較等)
  • 還能實作 STM32程式設計自動化;
  • 另外還提供其他的功能;

3.2 解鎖Flash

在stlink連接配接目标闆的情況下,打開

stlink utility

,在菜單欄的Target下選擇connect,因為這時候Flash已經被鎖住了,是以同樣地也看到相應的錯誤提示 Can not read memory Disable Read Out Protection and retry,具體如下圖所示;

STM32 使用st-link調試遇到寫保護 Flash Timeout 問題的解決思路

OK,下面隻需要接觸寫保護就行了,是以在菜單欄target裡打開Option Bytes…選項,或者直接通過快捷鍵ctrl+B打開,請確定目前已經正确連接配接了stlink和目标闆,否則會出現報錯;

正确連接配接的情況下,打開Option Bytes…,發現在這裡Read Out Protection選項是enable,這個表示無法通過swd讀取STM32内部Flash的程式。

STM32 使用st-link調試遇到寫保護 Flash Timeout 問題的解決思路

關鍵點:

将Read Out Protection選項設定位disable,點選Apply,這時候Flash已經成功解鎖了。但是同時發現,内部Flash已經被擦除了,,這可能STM32的保護機制有關,防止程式被拷機,然後進行反編譯破解,這樣也可以提高破解的門檻。具體顯示如下圖所示;

STM32 使用st-link調試遇到寫保護 Flash Timeout 問題的解決思路

完成以上步驟之後,在菜單欄Target下選擇Disconnect,或者通過快捷鍵ctrl+D斷開和目标闆的連接配接;重新進入MDK,就能正常對目标闆進行調試,仿真,以及程式的燒寫。

3.3 寫保護

在菜單欄target裡打開Option Bytes…選項,我們還看到下面有Flash sector protection選項;選擇Select all之後,發現所有Page都已經寫保護了,隻要選擇apply選項就可以對Flash進行寫保護;具體如下所示;

STM32 使用st-link調試遇到寫保護 Flash Timeout 問題的解決思路

4 總結

對于Flash寫保護的問題可以結合STM32參考手冊進行相應的學習,其内部Flash提供相應的保護機制,本文隻是結合ST官方工具stlink utility解決一下常見的這個簡單的問題。

筆者能力和水準有限,文中難免有錯誤和纰漏之處,請大佬們不吝賜教;

創作不易,如果本文幫到了您;

如果本文幫到了您,請幫忙點個贊 👍👍👍;

如果本文幫到了您,請幫忙點個贊 👍👍👍;

如果本文幫到了您,請幫忙點個贊 👍👍👍;