STM32彙編程式設計
一、STM32的三種Boot模式
1、三種Boot模式介紹
以 STM32F103 為例,STM32的三種Boot模式如下:
BOOT1 | BOOT0 | STM32的啟動方式 |
---|---|---|
x | 0 | 內部 FLASH |
1 | 1 | 內部 SRAM |
0 | 1 | 系統儲存器(也稱ISP啟動方式) |
使用者可以通過設定BOOT0和BOOT1的三種狀態,來選擇復位後的啟動方式:
- 內部 FLASH 啟動方式
當晶片上電後取樣到 BOOT0 引腳為低電平時, 0x00000000和 0x00000004 地址被對映到內部 FLASH 的首地0x08000000 和 0x08000004。因此,核心離開復位狀態後,讀取內部FLASH 的 0x08000000 地址空間儲存的內容,賦值給棧指標 MSP,作為棧頂地址,再讀取內部 FLASH 的 0x08000004 地址空間儲存的內容,賦值給程式指標PC,作為將要執行的第一條指令所在的地址。具備這兩個條件後,核心就可以開始從PC 指向的地址中讀取指令執行了。 - 內部 SRAM 啟動方式
當晶片上電後取樣到 BOOT0 和 BOOT1 引腳均為高電平時,0x00000000和 0x00000004 地址被對映到內部 SRAM 的首地址 0x20000000 和 0x20000004,核心從SRAM 空間獲取內容進行自舉。在 實 際 應 用 中 , 由 啟 動 文 件startup_stm32f103xe.s 決定了 0x00000000 和0x00000004 地址儲存什麼內容,連結時,由分散載入檔案(sct)決定這些內容的絕對地址,即分配到內部 FLASH 還是內部 SRAM。 - 系統儲存器啟動方式
當晶片上電後取樣到 BOOT0 引腳為高電平,BOOT1 為低電平時,核心將從系統儲存器的 0x1FFFF000 及 0x1FFFF004 獲取 MSP 及 PC 值進行自舉。系統儲存器是一段特殊的空間,使用者不能訪問,ST 公司在晶片出廠前就在系統儲存器中固化了一段程式碼。因而使用系統儲存器啟動方式時,核心會執行該程式碼,該程式碼執行時,會為 ISP 提供支援(In System Program),如檢測USART1/2、CAN2 及 USB 通訊介面傳輸過來的資訊,並根據這些資訊更新自己內部 FLASH 的內容,達到升級產品應用程式的目的,因此這種啟動方式也稱為 ISP 啟動方式。
2、在內部 SRAM 中除錯程式碼
以野火官方給的例程來實現,程式碼名為“RAM 除錯—多彩流水燈”。
硬體設計
在SRAM 上除錯程式,需要修改 STM32 晶片的啟動方式,在我們的板子上有引出 STM32 晶片的 BOOT0 和 BOOT1 引腳,可使用跳線帽設定它們的電平從而控制晶片的啟動方式,它支援從內部 FLASH 啟動、系統儲存器啟動以及內部 SRAM 啟動方式。我們現在是在 SRAM 中除錯程式碼,因此把 BOOT0 和 BOOT1 引腳都使用跳線帽連線到3.3V,使晶片從 SRAM 中啟動。
軟體設計
首先開啟“RAM 除錯—多彩流水燈”工程;
點選“Manage Project Items”按鈕,在彈出對話方塊左側的“Project Target”一欄包含了原工程的名字,如圖中的原工程名為“多彩流水燈”,右側是該工程包含的檔案。為了便於除錯,我們在左側的“Project Target”一欄新增一個工程名,如圖中輸入“SRAM_除錯”,輸入後點選 OK 即可,這個“SRAM_除錯”版本的工程會複製原“多彩流水燈”工程的配置,後面我們再進行修改。
選擇SRAM_除錯;
為了把它下載到晶片的 SRAM 中,還需要修改下載
器的配置,“Options for Target->Utilities->Settings”中的選項。
相關文章
- STM彙編程式設計程式設計
- 【實驗】 ARM彙編程式設計程式設計
- 彙編學習小記(二)-順序程式設計程式設計
- 彙編實驗小記(五)-迴圈程式設計程式設計
- Linux 的 x86 彙編程式設計(轉)Linux程式設計
- 三個程式設計中遇到的小問題彙編程式設計
- 飛思卡爾微控制器PIT彙編程式設計(一)程式設計
- 彙編程式碼Helloworld
- 計算機執行彙編程式碼的原理計算機
- 編織如程式設計程式設計
- CatFly【彙編程式碼還原】
- windows搭建彙編程式IDEWindowsIDE
- Java程式設計常見問題彙總Java程式設計
- 《MEF程式設計指南》博文彙總薦程式設計
- ARM彙編和C語言混合程式設計中陣列的陣列的操作C語言程式設計陣列
- GCC內聯彙編(2)GCC生成彙編程式碼簡單例項GC單例
- Altium Designer設計STM32最小系統(PCB設計)
- Jack架設WIN32彙編程式的開發環境Win32開發環境
- 彙編程式開發環境搭配開發環境
- iOS彙編入門教程(二)在Xcode工程中嵌入彙編程式碼iOSXCode
- Java程式設計常見問題彙總(一)Java程式設計
- 程式設計技巧彙總Github專案推薦程式設計Github
- 程式設計師 vs 編碼員程式設計師
- 可程式設計的編譯器程式設計編譯
- Java程式設計師面試學習資料彙總Java程式設計師面試
- pygame模組引數彙總(python遊戲程式設計)GAMPython遊戲程式設計
- 100個 iOS 程式設計師面試題彙總iOS程式設計師面試題
- shellcode轉換成彙編程式碼
- C與彙編程式的約定呼叫
- Visual Studio 開發彙編程式
- iOS設計模式彙總iOS設計模式
- 視覺化程式碼跟蹤除錯與STM32應用設計視覺化除錯
- 程式設計師常用的編輯器程式設計師
- 上位機程式設計編碼規範程式設計
- 彙編命令A
- 彙編指令
- 多程式多執行緒程式設計彙總(持續更新中)執行緒程式設計
- 程式設計方法論/架構設計/模式相關轉載連結彙總程式設計架構模式