色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32的完整啟動流程分析

jf_pJlTbmA9 ? 來源:嵌入式電子 ? 作者:嵌入式電子 ? 2023-10-25 16:00 ? 次閱讀

關于STM32的啟動流程,網上有的資料在討論幾種boot模式,有的在回答啟動文件的內容,在查閱了很多資料后,本文給出一個比較全面的總結和回答。

1. 根據boot引腳決定三種啟動模式

1.png

復位后,在 SYSCLK 的第四個上升沿鎖存 BOOT 引腳的值。BOOT0 為專用引腳,而 BOOT1 則與 GPIO 引腳共用。一旦完成對 BOOT1 的采樣,相應 GPIO 引腳即進入空閑狀態,可用于其它用途。BOOT0與BOOT1引腳的不同值指向了三種啟動方式:

1)從主Flash啟動。主Flash指的是STM32的內置Flash。選擇該啟動模式后,內置Flash的起始地址將被重映射到0x00000000地址,代碼將在該處開始執行。一般我們使用JTAG或者SWD模式下載調試程序時,就是下載到這里面,重啟后也直接從這啟動。

2從系統存儲器啟動。系統儲存器指的是STM32的內置ROM,選擇該啟動模式后,內置ROM的起始地址將被重映射到0x00000000地址,代碼在此處開始運行。ROM中有一段出廠預置的代碼,這段代碼起到一個橋的作用,允許外部通過UART/CANUSB等將代碼寫入STM32的內置Flash中。這段代碼也被稱為ISP(In System Programing)代碼,這種燒錄代碼的方式也被稱為ISP燒錄。關于ISP、ICP和IAP之間的區別將在后續章節中介紹。

3嵌入式SRAM中啟動。顯然,該方法是在STM32的內置SRAM中啟動,選擇該啟動模式后,內置SRAM的起始地址將被重映射到0x00000000地址,代碼在此處開始運行。這種模式由于燒錄程序過程中不需要擦寫Flash,因此速度較快,適合調試,但是掉電丟失。

總結:上面的每一種啟動方式我都描述了“xxx的起始地址被重映射到了0x00000000地址,從而代碼從xxx開始啟動”,如下圖是STM32F4xx中文參考手冊中的圖,可以看到類似的表述。同時,在下圖中也展示了STM32F4xx中統一編址下,各內存的地址分配,注意一點,即使相應的內存被映射到了0x00000000起始的地址,通過其原來地址依然是可以訪問的。

2.png

2. 啟動后bootloader做了什么?

根據BOOT引腳確定了啟動方式后,處理器進行的第二大步就是開始從0x00000000地址處開始執行代碼,而該處存放的代碼正是bootloader。

bootloader,也可以叫啟動文件,無論性能高下,結構簡繁,價格貴賤,每一種微控制器(處理器)都必須有啟動文件,啟動文件的作用便是負責執行微控制器從“復位”到“開始執行main函數”中間這段時間(稱為啟動過程)所必須進行的工作。最為常見的51,AVR或MSP430等微控制器當然也有對應啟動文件,但開發環境往往自動完整地提供了這個啟動文件,不需要開發人員再行干預啟動過程,只需要從main函數開始進行應用程序的設計即可。同樣,STM32微控制器,無論是keiluvision4還是IAR EWARM開發環境,ST公司都提供了現成的直接可用的啟動文件。

網上有很多資料分析了STM32的啟動文件的內容,在此我只進行簡單的表述。啟動文件中首先會定義堆棧,定義中斷/異常向量表,而其中只實現了復位的異常處理函數Reset_Handler,該函數內容如下(STM32F4XX,IAR編譯器),可以看到其主要執行了SystemInit和__iar_program_start兩個函數,其主要功能除了初始化時鐘,FPU等,還會執行一個重要功能,那就是內存的搬移、初始化操作。這是我想重點介紹的內容,同時也會回答一個疑問,就是如果從Flash啟動的話,代碼究竟是運行在哪兒的?在我之前接觸ARM9、CortexA系列的時候,一般都是把代碼搬到內部的SRAM或者外部DDR中執行的,STM32是如何呢?答案下一小節揭曉。

3.png

3. bootloader中對內存的搬移和初始化

本節針對程序在內置Flash中啟動的情況進行分析。

4.png

我們知道燒錄的鏡像文件中包含只讀代碼段.text,已初始化數據段.data和未初始化的或者初始化為0的數據段.bss。代碼段由于是只讀的,所以是可以一直放在Flash中,CPU通過總線去讀取代碼執行就OK,但是.data段和.bss段由于會涉及讀寫為了,為了更高的讀寫效率是要一定搬到RAM中執行的,因此bootloader會執行很重要的一步,就是會在RAM中初始化.data和.bss段,搬移或清空相應內存區域。

因此我們知道,當啟動方式選擇的是從內置Flash啟動的時候,代碼依舊是在Flash中執行,而數據則會被拷貝到內部SRAM中,該過程是由bootloader完成的。bootloader在完成這些流程之后,就會將代碼交給main函數開始執行用戶代碼。

  • 現在讓我們思考一個問題,PC機在運行程序的時候將程序從外存(硬盤)中,調入到RAM中運行,CPU從RAM中讀取程序和數據;而單片機的程序則是固化在Flash中,CPU運行時直接從Flash中讀取程序,從RAM中讀取數據,那么PC機能從Flash之類的存儲介質中直接讀代碼執行嗎?

  • 答案是不行。因為x86構架的CPU是基于馮.諾依曼體系的,即數據和程序存儲在一起,而且PC機的RAM資源相當豐富,從幾十M到幾百M甚至是幾個G,客觀上能夠承受大量的程序數據。但是單片機的構架大多是哈弗體系的,即程序和數據分開存儲,而且單片的片內RAM資源是相當有限的,內部的RAM過大會帶來成本的大幅度提高。

4. ISP、IAP、ICP三種燒錄方式

雖然這個小節稍稍偏題,但是由于上面在3中啟動方式中介紹過了ISP燒錄,因此一并在此介紹剩下的兩種燒錄方式。

1)ICP(In Circuit Programing)。在電路編程,可通過CPU的Debug Access Port 燒錄代碼,比如ARM Cortex的Debug Interface主要是SWD(Serial Wire Debug)或JTAG(Joint Test Action Group);

2)ISP(In System Programing)。在系統編程,可借助MCU廠商預置的Bootloader 實現通過板載UART或USB接口燒錄代碼。

3)IAP(In Applicating Programing)。在應用編程,由開發者實現Bootloader功能,比如STM32存儲映射Code分區中的Flash本是存儲用戶應用程序的區間(上電從此處執行用戶代碼),開發者可以將自己實現的Bootloader存放到Flash區間,MCU上電啟動先執行用戶的Bootloader代碼,該代碼可為用戶應用程序的下載、校驗、增量/補丁更新、升級、恢復等提供支持,如果用戶代碼提供了網絡訪問功能,IAP 還能通過無線網絡下載更新代碼,實現OTA空中升級功能。

4)IAP和ISP 的區別。

a、ISP程序一般是芯片廠家提供的。IAP一般是用戶自己編寫的

b、ISP一般支持的燒錄方式有限,只有串口等。IAP就比較靈活,可以靈活的使用各種通信協議燒錄

c、isp一般需要芯片進行一些硬件上的操作才行,IAP全部工作由程序完成,不需要去現場

d、isp一般只需要按格式將升級文件通過串口發送就可以。IAP的話控制相對麻煩,如果是OTA的話還需要編寫后臺的。

e、注意,這里介紹的bootloader功能顯然跟之前介紹的啟動文件bootloader有所區別,其目的是為了能接受外部鏡像進行燒錄,而不是為了運行普通用戶程序。

來源:嵌入式電子

免責聲明:本文為轉載文章,轉載此文目的在于傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請聯系小編進行處理

審核編輯 黃宇


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7542

    瀏覽量

    151316
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10854

    瀏覽量

    211578
  • PC
    PC
    +關注

    關注

    9

    文章

    2076

    瀏覽量

    154146
  • STM32
    +關注

    關注

    2270

    文章

    10895

    瀏覽量

    355729
  • Boot
    +關注

    關注

    0

    文章

    149

    瀏覽量

    35823
收藏 人收藏

    評論

    相關推薦

    淺談芯片制造的完整流程

    在科技日新月異的今天,芯片作為信息技術的核心部件,其制作工藝的復雜性和精密性令人嘆為觀止。從一粒普通的沙子到一顆蘊含無數晶體管的高科技芯片,這一過程不僅凝聚了人類智慧的結晶,也展現了現代半導體工業的極致工藝。本文將講述芯片制造的完整流程,揭開這一高科技產品的神秘面紗。
    的頭像 發表于 10-28 14:30 ?498次閱讀
    淺談芯片制造的<b class='flag-5'>完整流程</b>

    嵌入式系統的啟動流程

    嵌入式系統的啟動流程是一個復雜但有序的過程,它涉及從系統上電到操作系統內核及應用程序啟動的多個階段。
    的頭像 發表于 10-05 17:44 ?359次閱讀

    高速PCB信號完整分析及應用

    電子發燒友網站提供《高速PCB信號完整分析及應用.pdf》資料免費下載
    發表于 09-21 14:14 ?1次下載

    高速PCB信號完整分析及硬件系統設計中的應用

    電子發燒友網站提供《高速PCB信號完整分析及硬件系統設計中的應用.pdf》資料免費下載
    發表于 09-21 14:11 ?2次下載

    高速PCB信號完整性設計與分析

    高速PCB信號完整性設計與分析
    發表于 09-21 11:51 ?0次下載

    高速電路電源分配網絡設計與電源完整分析

    電子發燒友網站提供《高速電路電源分配網絡設計與電源完整分析.pdf》資料免費下載
    發表于 09-19 17:35 ?0次下載

    AMD Versal自適應SoC CPM5 QDMA的Tandem PCIe啟動流程介紹

    本文將從硬件設計和驅動使用兩個方面介紹基于 CPM5 QDMA 的 AMD Versal 自適應 SoC 的 Tandem 設計和啟動流程
    的頭像 發表于 09-18 10:07 ?515次閱讀
    AMD Versal自適應SoC CPM5 QDMA的Tandem PCIe<b class='flag-5'>啟動</b><b class='flag-5'>流程</b>介紹

    信號完整性與電源完整性-電源完整分析

    電子發燒友網站提供《信號完整性與電源完整性-電源完整分析.pdf》資料免費下載
    發表于 08-12 14:31 ?40次下載

    STM32啟動腳本詳解

    我從Keil和STM32CubeIDE開始我的嵌入式開發,然后慢慢過渡到只使用文本編輯器而沒有任何集成開發環境(IDE)。我一直使用這些IDE提供的啟動文件。在這篇文章中,我將解釋如何用C++編寫
    發表于 05-31 14:17 ?1次下載

    求助,關于TRAVEO MCU閃存啟動流程的問題求解

    我有一個關于 TRAVEO MCU 閃存啟動流程的問題。 Q) 架構 TRM - 34.3.3 閃存啟動流程,(6)、(8)、(9)、(10)、(11)、(12) 和 (13) 可以在
    發表于 05-30 06:25

    Linux啟動流程基本分析

    Linux啟動流程總的來說可以分成三個階段 Linux啟動流程圖 ? 第一步:上電 ?在 x86 系統中,將 1M 空間最上面的 0xF0000 到 0xFFFFF 這 64K 映射給
    的頭像 發表于 05-11 08:49 ?663次閱讀
    Linux<b class='flag-5'>啟動</b><b class='flag-5'>流程</b>基本<b class='flag-5'>分析</b>

    電機初次啟動正常,但stop后再無法正常啟動了是怎么回事?

    我用的MCSDK 5.2.0 的庫,芯片STM32F103R8,電機每次上電第一次啟動都能正常啟動,但停止后再重新啟動始終無法正常啟動(總是
    發表于 04-24 07:08

    Rockchip 3588 系統啟動流程

    Rockchip 3588是一款高性能、低功耗的ARM處理器,廣泛應用于智能電視、智能音箱和車載娛樂系統等領域。在本文中,我們將深入探討Rockchip 3588的系統啟動流程。 系統啟動流程
    的頭像 發表于 01-07 16:08 ?2580次閱讀

    Rockchip 系統啟動流程

    Rockchip 系統的啟動流程,包括 Boot ROM、Mask ROM、U-Boot、Linux 內核等。 Boot ROM 階段: 在 Rockchip 系統啟動的第一階段,處理器復位后會首先執行
    的頭像 發表于 01-04 15:54 ?1304次閱讀

    14種電機啟動電路分析

    【資料】14種電機啟動電路分析
    的頭像 發表于 01-04 10:56 ?1239次閱讀
    14種電機<b class='flag-5'>啟動</b>電路<b class='flag-5'>分析</b>
    主站蜘蛛池模板: 日本xxx护士与黑人| 女人高潮了拔出来了她什么感觉 | 99无码熟妇丰满人妻啪啪| 伊人热| 91系列在线观看免费| brazzers巨臀系列| 国产成人精品精品欧美| 国产在线观看成人免费视频| 久久婷婷五月综合色丁香花| 奶头好翘是不是想要了| 青柠在线观看视频在线| 香蕉尹人综合精品| 在线观看国产精美视频| 99久久久免费精品免费| 国产AV亚洲精品久久久久软件| 国产女人与黑人在线播放| 久久丫线这里只精品| 日本护士在线观看| 侮辱丰满美丽的人妻| 中文字幕亚洲无线码一区| 被黑人群jian又粗又大H| 国产精品人成在线播放新网站| 久久精品视频15人人爱在线直播| 牛牛在线精品视频(正)| 五花大绑esebdsm国产| 伊人久在线观看视频| yellow免费观看完整版直播| 国产精品无码久久久久不卡| 老色哥网站| 乌克兰xxxxx| 18禁黄无遮挡禁游戏在线下载| 高h 纯肉文| 久久精品中文騷妇女内射| 日本xxxx裸体xxxx| 夜色福利院在线观看免费| 成人天堂婷婷青青视频在线观看| 国产在线精彩视频| 青柠在线观看免费高清电视剧荣耀| 亚洲欧美日韩精品自拍| xxx免费观看| 久久蜜视频|