chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內(nèi)不再提示

STM32的完整啟動流程分析

jf_pJlTbmA9 ? 來源:嵌入式電子 ? 作者:嵌入式電子 ? 2023-10-25 16:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

1. 根據(jù)boot引腳決定三種啟動模式

1.png

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

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

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

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

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

2.png

2. 啟動后bootloader做了什么?

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

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

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

3.png

3. bootloader中對內(nèi)存的搬移和初始化

本節(jié)針對程序在內(nèi)置Flash中啟動的情況進行分析。

4.png

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

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

  • 現(xiàn)在讓我們思考一個問題,PC機在運行程序的時候?qū)⒊绦驈耐獯妫ㄓ脖P)中,調(diào)入到RAM中運行,CPU從RAM中讀取程序和數(shù)據(jù);而單片機的程序則是固化在Flash中,CPU運行時直接從Flash中讀取程序,從RAM中讀取數(shù)據(jù),那么PC機能從Flash之類的存儲介質(zhì)中直接讀代碼執(zhí)行嗎?

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

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

雖然這個小節(jié)稍稍偏題,但是由于上面在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)。在系統(tǒng)編程,可借助MCU廠商預置的Bootloader 實現(xiàn)通過板載UART或USB接口燒錄代碼。

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

4)IAP和ISP 的區(qū)別。

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

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

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

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

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

來源:嵌入式電子

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

審核編輯 黃宇


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

    關注

    49

    文章

    8812

    瀏覽量

    165558
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11320

    瀏覽量

    225799
  • PC
    PC
    +關注

    關注

    9

    文章

    2168

    瀏覽量

    159719
  • STM32
    +關注

    關注

    2312

    文章

    11189

    瀏覽量

    374487
  • Boot
    +關注

    關注

    0

    文章

    154

    瀏覽量

    37904
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    E4990A阻抗分析儀阻抗測量的完整步驟詳解

    E4990A阻抗分析儀是一款高性能精密儀器,廣泛應用于電子元器件、材料特性及高頻電路的交流阻抗測量。其測量結(jié)果準確、重復性好,但要獲得可靠數(shù)據(jù),必須遵循規(guī)范的操作流程。以下是使用E4990A進行阻抗測量的完整步驟,涵蓋從準備到數(shù)
    的頭像 發(fā)表于 04-02 15:13 ?124次閱讀
    E4990A阻抗<b class='flag-5'>分析</b>儀阻抗測量的<b class='flag-5'>完整</b>步驟詳解

    實戰(zhàn)排障|RK平臺啟動卡死、SPL崩潰,兩行日志直接定位DDR硬件死穴!

    在嵌入式Linux產(chǎn)品開發(fā)中,U-Boot SPL啟動崩潰、主板不上電、啟動卡死在初始化階段是最讓人頭疼的硬故障之一。日志亂碼、CPU異常復位、看不到完整啟動
    的頭像 發(fā)表于 02-24 15:22 ?1027次閱讀
    實戰(zhàn)排障|RK平臺<b class='flag-5'>啟動</b>卡死、SPL崩潰,兩行日志直接定位DDR硬件死穴!

    深圳南柯電子|EMC摸底測試整改:“定位-分析-優(yōu)化-驗證”全流程

    深圳南柯電子|EMC摸底測試整改:“定位-分析-優(yōu)化-驗證”全流程
    的頭像 發(fā)表于 01-28 09:42 ?367次閱讀

    深入解析rk平臺Android Bootloader核心代碼:從啟動流程到AVB驗證

    作為Android設備啟動的第一道“閘門”,Bootloader(以U-Boot為主)承擔著初始化硬件、加載內(nèi)核、驗證鏡像完整性的核心職責。今天我們拆解Rockchip平臺
    的頭像 發(fā)表于 01-22 07:06 ?461次閱讀
    深入解析rk平臺Android Bootloader核心代碼:從<b class='flag-5'>啟動</b><b class='flag-5'>流程</b>到AVB驗證

    如何在Zynq UltraScale+ MPSoC平臺上通過JTAG啟動嵌入式Linux鏡像

    流程教程)。本文則進一步講解如何在 Zynq UltraScale+ MPSoC 平臺上通過 JTAG 逐步啟動 Linux,并提供了完整的過程與關鍵命令。只要按步驟操作,即使是復雜的 Linux 鏡像也能成功通過 JTAG
    的頭像 發(fā)表于 01-13 11:45 ?4953次閱讀

    視頻卡頓分析流程

    視頻卡頓分析流程
    發(fā)表于 11-10 16:55 ?0次下載

    d1哪吒開發(fā)板的啟動流程分析

    啟動。 5.裸機程序的編寫 在分析了上述SPL和opensbi的啟動流程后,自行編譯一個簡單的裸機程序就容易許多。從啟動
    發(fā)表于 10-29 06:44

    eVTOL艙內(nèi)噪聲響應分析的仿真流程

    上一節(jié)中介紹了eVTOL旋翼噪聲的表征以及通過聲學BEM模型分析旋翼噪聲到eVTOL機體外表面的噪聲傳播分析流程,本節(jié)將在上節(jié)內(nèi)容的基礎上繼續(xù)介紹eVTOL艙內(nèi)噪聲響應分析的仿真
    的頭像 發(fā)表于 09-23 14:06 ?811次閱讀
    eVTOL艙內(nèi)噪聲響應<b class='flag-5'>分析</b>的仿真<b class='flag-5'>流程</b>

    企業(yè)級Linux磁盤維護的完整流程

    在企業(yè)級Linux環(huán)境中,磁盤故障是導致系統(tǒng)宕機和數(shù)據(jù)丟失的主要原因之一。據(jù)統(tǒng)計,超過70%的企業(yè)級服務器故障與存儲系統(tǒng)相關。作為運維工程師,掌握完整的磁盤維護流程不僅能預防故障,更能在關鍵時刻拯救整個業(yè)務系統(tǒng)。
    的頭像 發(fā)表于 07-23 16:59 ?1040次閱讀

    求助,關于K230啟動流程疑問求解

    , GNU ld (GNU Binutils) 2.35) #1 SMP Sat Jun 21 23:51:35 CST 2025 [ 0.000000] earlycon: sbi0 上面是啟動流程
    發(fā)表于 07-11 06:42

    【案例2.36】芯片啟動異常的故障分析

    【案例2.36】芯片啟動異常的故障分析在某產(chǎn)品的調(diào)試中發(fā)現(xiàn),板上核心處理芯片在每次啟動后的表現(xiàn)不同,偶爾會出現(xiàn)無法啟動的故障。經(jīng)過幾百次反復上下電測試發(fā)現(xiàn),在大多數(shù)情況下,芯片
    的頭像 發(fā)表于 06-26 08:24 ?1192次閱讀
    【案例2.36】芯片<b class='flag-5'>啟動</b>異常的故障<b class='flag-5'>分析</b>

    使用USB轉(zhuǎn)TTL串口板和ST-LINK調(diào)試下載器給STM32單片機下載程序

    本文詳細介紹如何使用ST-LINK/V2和USB轉(zhuǎn)TTL串口板為STM32單片機下載程序,包括STM32啟動模式、JTAG與SWD接口對比、驅(qū)動安裝及官方軟件STM32ST-LINKU
    的頭像 發(fā)表于 06-20 17:26 ?3157次閱讀
    使用USB轉(zhuǎn)TTL串口板和ST-LINK調(diào)試下載器給<b class='flag-5'>STM32</b>單片機下載程序

    HarmonyOS實戰(zhàn):高德地圖定位功能完整流程詳解

    完整的定位功能流程,建議點贊收藏! 需求分析 要想實現(xiàn)一個完整的定位需求流程,就必須要做好準備工作,了解實現(xiàn)需求的具體步驟。 權(quán)限申請 檢查
    的頭像 發(fā)表于 06-09 15:23 ?1313次閱讀

    飛凌嵌入式ElfBoard ELF 1板卡-uboot啟動流程分析之uboot啟動階段

    u-boot的relocation重定位操作。四、清除BSS段。五、調(diào)用board_init_r函數(shù),執(zhí)行后續(xù)的板級初始化操作,包括各種外設接口、中斷、環(huán)境變量等。最后調(diào)用run_main_loop()函數(shù),進入倒計時等待,等待超時后執(zhí)行bootcmd啟動內(nèi)核。具體流程
    發(fā)表于 05-30 09:24

    伺服電機測試流程分析

    伺服電機的測試流程是確保電機正常工作的關鍵步驟。以下是對伺服電機測試流程的詳細分析。 ?一、初步檢查與準備 1. 外觀檢查:首先,對伺服電機進行外觀檢查,確保電機完好無損,沒有明顯的物理損傷或變形
    的頭像 發(fā)表于 04-23 17:56 ?1842次閱讀