Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

STM32 三種啟動模式與存儲介質對應關係詳解

編輯:Linux 教學

啟動模式由 BOOT0/BOOT1 腳位決定

STM32 復位時採樣 BOOT0 (PB8/BOOT0) 與 BOOT1 (PB9/BOOT1) 電平,決定從哪個記憶體區域取向量表並開始執行:

BOOT1BOOT0啟動模式存儲介質典型用途
X0主閃存啟動內部 Flash (用戶程式區)正常產品運行,用戶應用程式
01系統存儲器啟動內部 System Memory (ROM)ISP/USB DFU/串口下載器 (廠商燒錄 Bootloader)
11內嵌 SRAM 啟動內部 SRAMRAM 運行、調試、加密應用、快速原型驗證

註: BOOT1 僅在 BOOT0=1 時生效;BOOT0=0 時無視 BOOT1。

三大存儲介質詳細特性

1. 用戶閃存 — 內部 Flash (Main Flash Memory)

  • 位址範圍:0x0800 0000 起始 (大小視型號 64KB~2MB)。
  • 特性:非揮發、可擦寫、支援讀取保護 (RDP)、分頁擦除 (1/2/4KB)、整塊擦除。
  • 啟動流程:復位 → 讀取 0x0800 0004 (Reset Handler 位址) → 跳轉執行。
  • 向量表偏移:可透過 SCB->VTOR 重定向 (支援 Bootloader + App 架構)。

2. 系統存儲器 — System Memory (Boot ROM)

  • 位址範圍:0x1FFF 0000 起始 (大小 ~20-30KB,視系列)。
  • 內容:出廠燒錄 Bootloader (ISP),支援 UART/USB/I2C/SPI/CAN 介面下載用戶程式至 Flash。
  • 特性:**唯讀,不可擦除/修改**,受寫保護。
  • 啟動:BOOT0=1, BOOT1=0 → 核心從 0x1FFF 0004 取向量 → 執行 Bootloader → 等待主機連線下載。

3. 內嵌 SRAM — Embedded SRAM

  • 位址範圍:0x2000 0000 起始 (大小 10KB~640KB+)。
  • 特性:揮發 (斷電丟失)、零等待週期讀寫、位元頻帶高、可作為程式碼執行區 (XN bit 需關閉)。
  • 啟動:BOOT0=1, BOOT1=1 → 核心從 0x2000 0004 取向量 → 執行 SRAM 程式。
  • 應用場景:
    • Bootloader 將加密固件解密載入 SRAM 執行 (防逆向)。
    • 高速數據處理 (DMA 目標、緩衝區)。
    • 開發階段快速下載測試 (不磨損 Flash)。

記憶體映射總覽 (以 STM32F103xB 為例)

0x0000 0000  ┌─────────────────────┐
             │  別名區 (Boot 映射)  │  ← 根據 BOOT 腳位映射到 Flash/System/SRAM
0x0000 0000  └─────────────────────┘
0x0800 0000  ┌─────────────────────┐
             │   主閃存 (Flash)     │  0x0800 0000 ~ 0x0801 FFFF (128KB)
0x0802 0000  └─────────────────────┘
0x1FFF 0000  ┌─────────────────────┐
             │   系統存儲器 (ROM)    │  Bootloader
0x1FFF 7FFF  └─────────────────────┘
0x2000 0000  ┌─────────────────────┐
             │      SRAM            │  0x2000 0000 ~ 0x2000 4FFF (20KB)
0x2000 5000  └─────────────────────┘
0x4000 0000  ┌─────────────────────┐
             │   外設總線區          │  GPIO, USART, SPI, ADC...
             └─────────────────────┘

實戰:如何切換啟動模式

開發板常見跳線帽/按鍵設計

  • 正常運行:BOOT0 接低 (GND)、BOOT1 接低 或懸空 → Flash 啟動。
  • 進入 ISP 下載模式:BOOT0 接高 (3.3V)、BOOT1 接低 → System Memory 啟動,配合 USB/串口工具 (STM32CubeProgrammer, FlyMcu, stm32flash) 燒錄。
  • SRAM 調試:BOOT0 接高、BOOT1 接高 → 需先由 Bootloader/JTAG 將程式載入 SRAM 再復位 (較少直接用)。

軟體控制啟動 (無需硬體跳線)

// 應用程式中跳轉至 System Memory (模擬 BOOT0=1, BOOT1=0)
void jumpToBootloader(void) {
    __disable_irq();
    // 1. 關閉所有外設、SysTick
    // 2. 設定 MSP 為 System Memory 區域的初始堆疊指標
    uint32_t bootloader_sp = *(__IO uint32_t*)0x1FFF0000;
    __set_MSP(bootloader_sp);
    // 3. 取得 Reset Handler 位址並跳轉
    void (*bootloader_reset)(void) = (void(*)(void))*(__IO uint32_t*)0x1FFF0004;
    bootloader_reset();
}

常見誤區澄清

誤區正確說明
System Memory 可寫入**不可寫/擦**,出廠固化 Bootloader,唯讀。
SRAM 啟動需外部 RAM**內嵌 SRAM** 即片上 SRAM,非外部 FSMC/SDRAM。
BOOT 腳位復位後可改變啟動模式**僅復位瞬間採樣有效**,運行中改變 BOOT 腳位不影響當前啟動模式。
所有 STM32 映射相同Flash/SRAM/System Memory 起始位址**各系列不同** (F0/F1/F4/F7/H7/L4 等),必須查閱對應參考手冊。

結語

STM32 三種啟動模式分別對應 **Flash (產品常態)、System Memory (廠商 Bootloader/ISP)、SRAM (特殊調試/加密運行)**。理解 BOOT0/BOOT1 採樣邏輯、記憶體映射位址、向量表重定向機制,是設計現場升級 (IAP)、安全啟動、生產燒錄流程的基礎。

Copyright © Windows教程網 All Rights Reserved