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彙編程式設計程式設計
- 彙編實驗小記(五)-迴圈程式設計程式設計
- 彙編學習小記(二)-順序程式設計程式設計
- 彙編程式碼Helloworld
- 計算機執行彙編程式碼的原理計算機
- windows搭建彙編程式IDEWindowsIDE
- CatFly【彙編程式碼還原】
- ARM彙編和C語言混合程式設計中陣列的陣列的操作C語言程式設計陣列
- iOS彙編入門教程(二)在Xcode工程中嵌入彙編程式碼iOSXCode
- Jack架設WIN32彙編程式的開發環境Win32開發環境
- 在VS2019使用MASM編寫彙編程式ASM
- 程式設計師大牛必備的英文詞彙程式設計師
- 彙編程式開發環境搭配開發環境
- Altium Designer設計STM32最小系統(PCB設計)
- 彙編
- Java程式設計筆記,springboot常用屬性彙總Java程式設計筆記Spring Boot
- C++詞彙集錦程式設計人必備C++程式設計
- 程式設計師常用的編輯器程式設計師
- 上位機程式設計編碼規範程式設計
- 給程式設計師的幾點程式設計經驗----《編寫高質量程式碼》程式設計師
- iOS設計模式彙總iOS設計模式
- Cursor,程式設計師的 AI 程式碼編輯助手程式設計師AI
- pygame模組引數彙總(python遊戲程式設計)GAMPython遊戲程式設計
- 程式設計師寶典: 免費好物API彙總程式設計師API
- Java程式設計師面試學習資料彙總Java程式設計師面試
- Python常用的六款程式設計開發工具彙總!Python程式設計
- nasm彙編ASM
- 彙編命令A
- 視覺化程式碼跟蹤除錯與STM32應用設計視覺化除錯
- 【程式設計素質】Java編碼約定程式設計Java
- 一個程式設計師的編年史程式設計師
- 程式設計師必知的程式語言編年史程式設計師
- 彙編初識與計算機組成計算機
- 前端程式設計輔助網站彙總(將持續更新)前端程式設計網站
- 程式設計微刊第六期文章彙總(2018.6)程式設計
- 程式設計師學習必備書單彙總,超全!程式設計師
- Java多執行緒程式設計基礎知識彙總Java執行緒程式設計
- Linux系統程式設計【3.1】——編寫ls命令Linux程式設計