日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32 之十四 System Memory、Bootloader

發布時間:2024/10/14 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32 之十四 System Memory、Bootloader 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??由于工作的需要,最近學習了一下 STM32F4 MCU 中的 BootLoader。對比了 ST 的其他系列的的 MCU,關于 Bootloader 這部分原理基本都是一樣的,無非就是配置項多少的區別。下面記錄一下以 STM32F411 為例的學習歷程。

引導模式

??每個芯片對應的參考手冊中都有這部分的介紹,在對應的翻譯的中文手冊中被稱為自舉模式。在 STM32F4xx 中,可通過 BOOT[1:0] 引腳選擇三種不同的自舉模式,如下圖所示:

  • 從 Main memory 引導: Main memory 被映射到為引導存儲空間(0x00000000),但仍可以從其原始存儲空間(0x08000000)中訪問。 換句話說,可以從地址 0x00000000 或 0x08000000 開始訪問 Main memory。在實際使用中,這種模式用的居多!
  • 從 System memory 引導: System memory 被映射到為引導存儲空間(0x00000000),但仍可以從其原始存儲空間(0x1FFF0000)中訪問。這部分存儲空間中,存放了 ST 的 Boot 代碼!不同的芯片里面的代碼是有區別的,這個部分在手冊 AN2606.pdf 中有詳細的介紹。今天我們就來重點學習一下這部分。
  • 從 SRAM 引導: SRAM1 被映射到為引導存儲空間(0x00000000),但仍可以從其原始存儲空間(0x20000000)中訪問。我至今沒明白這個模式如何去使用,后面有機會再研究研究。或者有知道的小伙伴可以私聊給我一些指導!

??復位后,MCU 會在 SYSCLK 的 第四個 上升沿鎖存 BOOT 引腳的值。如果我們需要改變啟動模式,就需要在復位之后盡快改變 BOOT 引腳的值。其中,BOOT0 為專用引腳,而 BOOT1 就不一樣了。主要有以下兩種情況:

  • 部分 MCU 中,BOOT1 不表示 I/O 引腳,而是 選項字節區域 的一個位。STM32F05x 和 STM32F3xx 器件就屬于這種情況。此時 BOOT1 通過選項字節中的 nBoot1 位進行配置。
    • 當 nBoot1 位置 1 時,相當于上圖中的 BOOT1 復位為 0。
    • 當 nBoot1 位復位為 0 時,相當于上圖中的 BOOT1 置 1。
  • 部分 MCU 中,則與普通的 GPIO 引腳共用一個引腳。一旦完成對 BOOT1 的采樣,相應 GPIO 引腳即進入空閑狀態,我們可以將該引腳用于其它用途。
  • 注意:

  • MCU 退出待機模式時,還會對 BOOT 引腳重新采樣。
  • 如果器件從 SRAM 啟動,在應用程序初始化代碼中,需要使用 NVIC 異常及中斷向量表和偏移寄存器來重新分配 SRAM 中的向量表。
  • 選項字節區域 見對應 MCU 的參考手冊 FLASH 章節即可
  • 對于具有兩個 BANK 的 MCU,例如 STM32L476,情況可能更加復雜
  • System Memory

    ??這部分其實就是 MCU 中固定位置的一塊區域,里面存放了一些固定的代碼。如下圖是 STM32F411 的地址映射圖:

    這部分空間在出廠前的生產期間由 ST 進行了編程,出廠后就不可更改,通常我們就將這里的程序稱為 引導程序(BootLoader) 。其主要作用就是是通過一些可用的串行外設(USART、CAN、USB、I2C 等)將應用程序下載到內部 Flash 中。

    幾乎全系列的 MCU 都是支持這部分功能的。下面是手冊給出的適用情況表格:

    當然不同的 MCU 因為外設的不同,可能支持一個或多個嵌入式串行外圍設備。 **引導程序標識符(ID)**提供了 MCU 支持的串行外圍設備的信息。引導程序標識符具有固定的格式,適用于除STM32F1xx 之外的所有 STM32 系列 MCU。

    這個 ID 也存儲在 MCU 的固定位置,下圖是一個部分系列 MCU 的列表

    上圖只是部分內容,AN2606 中有一個很長表格,詳細列出了每個系列的 MCU 中的 BootLoader 支持的串行外設情況。

    對于不同的外設協議,ST 都提供對應的非常詳細的應用手冊:

    • AN3154: CAN protocol used in the STM32 bootloader
    • AN3155: USART protocol used in the STM32 bootloader
    • AN3156: USB DFU protocol used in the STM32 bootloader
    • AN4221: I2C protocol used in the STM32 bootloader
    • AN4286: SPI protocol used in the STM32 bootloader
    • AN5405: FDCAN protocol used in the STM32 bootloader

    ??對于使用 DFU/CAN 接口嵌入引導程序的 STM32 MCU,其中 DFU/CAN 操作需要外部時鐘源(HSE)。 其中的引導加載程序固件會使用內部振蕩器時鐘(HSI,MSI) 動態檢測 HSE 的值(因為引導加載程序不知道用戶有沒有外接 HSE)。 當(由于溫度變化或其他條件)內部振蕩器精度在公差帶以上(理論值的1%左右)變化,引導加載程序可能會計算出錯誤的 HSE 頻率值。 在這種情況下,引導加載程序 DFU/CAN 接口可能會出現故障或根本無法工作。

    進入

    ??除了上面的引導模式章節介紹的 BOOT 引腳方式可以進入 System Memory 之外,我們其實還可以直接使用程序跳轉進入。但是在跳到引導加載程序之前,必須處理一下幾個方面:

    • 禁用所有外設時鐘
    • 禁用使用的 PLL
    • 關閉所有中斷
    • 清除所有被掛起的中斷

    ??進入引導程序之后,我們就可以使用對應的外設協議來對 FLASH 進行操作了。ST 本身也提供了很多實用工具。例如,若通過 UART 接口來燒寫程序,則要下載個 PC 端的 flash 燒錄工具軟件 STM32 Flash loader demonstrator 來配合;若通過USB 接口來燒寫程序,則需要下載 USB DfuSe工具軟件來實現。

    目前,ST 推出了新一代燒寫工具 STM32CubeProgrammer,把上面的工具給整合成了一個

    退出

    ??通過退出引導加載程序激活條件并生成硬件復位或使用 Go 命令執行用戶代碼,即可以退出系統內存引導模式。
    ??執行 Go 命令時,引導加載程序使用的外設寄存器不會在跳轉到用戶應用程序之前初始化為它們的默認重置值。 如果要使用,則必須在用戶應用程序中重新配置。 因此,如果 IWDG 用于在應用中,必須調整 IWDG 預分頻器的值,以滿足其要求。

    參考

  • AN2606 Application note STM32 microcontroller system memory boot mode
  • DS10314.pdf
  • RM0383.pdf
  • 總結

    以上是生活随笔為你收集整理的STM32 之十四 System Memory、Bootloader的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。