STM32彙編程式設計

芊芊子發表於2020-12-28

一、STM32的三種Boot模式

1、三種Boot模式介紹

      以 STM32F103 為例,STM32的三種Boot模式如下:

BOOT1BOOT0STM32的啟動方式
x0內部 FLASH
11內部 SRAM
01系統儲存器(也稱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”中的選項。
在這裡插入圖片描述

在這裡插入圖片描述

相關文章