在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

STM32的啟動過程如何分析

汽車電子技術 ? 來源:嵌入式之入坑筆記 ? 作者: 嵌入式入坑筆記 ? 2023-02-10 10:48 ? 次閱讀

本文分析STM32單片機從上電到運行的過程,目的在于了解STM32單片機從啟動到運行的整個過程。

一般我們在使用STM32單片機的時候,都是使用官方提供的驅動文件,移植到自己即將要使用的工程中,移植完成之后再編寫自己的邏輯代碼,放到main( )函數中,就可以完美的運行起來了。相信很多的人都沒有去關注過STM32從啟動到運行這個過程都發生了什么,現在就簡單分析一些這個過程。

本文以STM32F103為例進行分析。在官方給我們提供的啟動文件中,將整個單片機的啟動過程要做的事情都已經幫我們做好了,以至于我們在使用這款單片機的時候,幾乎可以不會吹灰之力就可以運行起來。STM32F103的啟動文件形如:

pYYBAGPlr7WAHISAAAAWykW-AdI267.png

根據不同的芯片容量,都有相對應的啟動文件可供選擇,實際使用根據芯片容量選擇合適的啟動文件即可。

啟動文件的主要作用有:

1)設置棧

2)初始化 SP 指針

3)設置堆

4)復位中斷服務函數

5)調用 SystemInit()函數來完成初始化工作

6)調用__main,該函數內部會調用 main()函數

1、設置棧

從啟動文件中可以看到:

poYBAGPlr8OAFVOrAAFaSyci8hI412.png

上述代碼中: 1)35行,將棧的大小設為0x00000400(即1024 = 1KB)。 2)37行,棧名稱為STACK,不初始化,可讀可寫,8(2^3)字節對齊。 3)38行,分配一片連續的存儲區域并初始化為 0,大小為0x400個字節。 4)39行,__initial_sp表示棧的結束地址,即棧頂地址,STM32中棧是由高地址向低地址生長。

2、設置堆

pYYBAGPlr86AcYjlAAEQ8AAMUJA021.png

上述代碼中: 1)45行,將堆的大小設為0x00000200(即512B = 0.5KB)。 2)47行,棧名為HEAP,不初始化,可讀可寫,8(2^3)字節對齊。 3)48行,堆空間起始地址。 4)49行,堆空間:0x200個字節。 5)50行,堆空間結束地址。

3、對堆棧屬性進行設置

poYBAGPlr_GAa5-TAAAaf4C3VUE644.png

1)PRESERVE8 指令指定當前文件保持堆棧八字節對齊。 2)告訴匯編器下面是32位的Thumb指令,如果需要匯編器將插入位以保證對齊。

4、設置中斷向量表

poYBAGPlr_2ADLFEAAF8fMwZhoM566.png

1)57行,定義一塊數據段,只可讀,段名字是RESET。

2)58行,EXPORT:在程序中聲明一個全局的標號__Vectors,該標號可在其他的文件中引用。

3)59行,在程序中聲明一個全局的標號__Vectors_End。

4)60行,在程序中聲明一個全局的標號__Vectors_Size。


之后的是中斷的定義,可以分為兩部分:

一部分是系統內部中斷:

poYBAGPlsAuAal7TAADpCXTdOyM026.png

另一部分是外部中斷:

poYBAGPlsBeAJr6EAAEsVhKGedY311.png

在之后是中斷向量表的其他設置:

poYBAGPlsCKAND64AABEjYVDwlU902.png

1)142行,得到向量表的大小。

2)144行,定義一個代碼段,可讀,段名字是.text。

5、中斷功能的定義

復位中斷:

pYYBAGPlsC-AWQOMAADoK5Dz6uI969.png

1)149行,IMPORT:偽指令用于通知編譯器要使用的標號在其他的源文件中定義。 2)150行,系統初始化。 3)151行,R0的值為SystemInit的地址。

4)152行,切換指令集,跳到SystemInit。 5)153行,R0的值為__main的地址。__main是庫提供的函數。用于完成堆棧,堆的初始化等工作,還會調用__user_initial_stackheap。 6)154行,切換指令集,跳到__main,并且最終會跳轉到main(),進入C語言運行環境。

6、用戶棧和堆初始化

pYYBAGPlsDqAJbHUAACq2qiA0m0429.png

1)333行,如果勾選了micro lib,使用微庫。 2)339行,沒有勾選微庫。

pYYBAGPlsEWAPJUDAAEI8EiGtpg685.png

1)344,用戶堆棧初始化程序入口。 2)346,保存堆起始地址。 3)347行,保存棧結束地址。 4)348行,保存堆結束地址。 5)349行,保存棧起始地址。

7、中斷跳轉

中斷發生之后,是怎么實現跳轉到相應的中斷服務函數里面的呢? 1)首先,前面

定義好了中斷的響應函數,即中斷向量表,標號__Vectors,表示中斷向量表的入口地址。2)我們假設STM32從FLASH啟動,則中斷向量表起始地址為0x8000000,STM32上電后根據boot引腳來決定PC位置,即啟動后PC跳到0x08000000。3)然后CPU會先取2個地址,第一個是棧頂地址,第二個是復位異常地址(Reset_Handler),Reset_Handler最終會進入到C語言的運行環境,這個時候會先配置NVIC,使用NVIC_SetVectorTable()可以配置中斷向量表的起始地址和偏移,告訴CPU該向量表是位于Flash還是Ram,偏移是多少。 4)在發生中斷后,CPU找到中斷向量表地址,然后根據偏移(對號入座)再找到中斷地址,這樣就完成了跳轉了。

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

    關注

    6056

    文章

    44800

    瀏覽量

    643697
  • STM32
    +關注

    關注

    2282

    文章

    10980

    瀏覽量

    360784
  • 啟動
    +關注

    關注

    0

    文章

    27

    瀏覽量

    14041
收藏 人收藏

    評論

    相關推薦

    STM32H7的啟動過程分析

    本章教程主要跟大家講STM32H7的啟動過程,這里的啟動過程是指從CPU上電復位執行第1條指令開始(匯編文件)到進入C程序main()函數入口之間的部分。
    的頭像 發表于 10-17 14:42 ?2518次閱讀

    詳解STM32啟動過程

    本章教程主要跟大家講STM32H7的啟動過程,這里的啟動過程是指從CPU上電復位執行第1條指令開始(匯編文件)到進入C程序main()函數入口之間的部分。
    發表于 11-14 11:24 ?1964次閱讀

    專家揭秘:STM32啟動過程全解

    電子發燒友網核心提示: 本文主要闡述了STM32啟動過程全面解析,包括啟動過程的介紹、啟動代碼的陳列以及深入解析。 相對于ARM上一代的主流ARM7/ARM9內核架構,新一代Corte
    發表于 09-10 08:50 ?5.3w次閱讀
    專家揭秘:<b class='flag-5'>STM32</b><b class='flag-5'>啟動過程</b>全解

    STM32F429啟動過程詳解

    第13章 STM32F429啟動過程詳解本章教程主要跟大家講STM32F429的啟動過程,這里的啟動過程是指從CPU上電復位執行第1條指令開
    發表于 08-03 06:15

    解析STM32啟動過程

    stm32系列芯片的種類和型號都有哪些?STM32啟動過程是怎樣的?
    發表于 10-29 06:39

    STM32整個啟動過程是怎樣的

    STM32整個啟動過程是怎樣的?整個啟動過程涉及的代碼有哪些呢?
    發表于 11-29 06:59

    STM32啟動過程是怎樣的?

    STM32啟動過程是怎樣的?
    發表于 11-30 06:08

    嵌入式uCLinux內核啟動過程分析

    分析uCLinux的啟動過程,可以加快系統啟動速度、正確建立應用環境。本文要研究的就是uCLinux操作系統內核的啟動過程。
    發表于 08-15 16:51 ?822次閱讀

    詳解bootloader的執行流程與ARM Linux啟動過程分析

    RM Linux啟動過程分析是本文要介紹的內容,嵌入式 Linux 的可移植性使得我們可以在各種電子產品上看到它的身影。對于不同體系結構的處理器來說Linux的啟動過程也有所不同。 本文以
    的頭像 發表于 12-21 09:24 ?1.1w次閱讀
    詳解bootloader的執行流程與ARM Linux<b class='flag-5'>啟動過程</b><b class='flag-5'>分析</b>

    STM32啟動過程是怎么樣的?

    下好程序后,重啟芯片時,SYSCLK的第4個上升沿,BOOT引腳的值將被鎖存,這就是所謂的啟動過程。 STM32上電或者復位后,代碼區始終從0x00000000開始,其實就是將存儲空間的地址映射到0x00000000中。三種啟動
    的頭像 發表于 11-27 16:36 ?3762次閱讀
    <b class='flag-5'>STM32</b>的<b class='flag-5'>啟動過程</b>是怎么樣的?

    STM32上電后啟動過程

    STM32上電后啟動過程
    發表于 11-15 18:21 ?16次下載
    <b class='flag-5'>STM32</b>上電后<b class='flag-5'>啟動過程</b>

    STM32啟動過程--啟動文件--分析

    STM32啟動過程--啟動文件--分析一、概述1、說明  每一款芯片的啟動文件都值得去研究,因為它可是你的程序跑的最初一段路,不可以不知道。
    發表于 11-30 13:21 ?4次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>啟動過程</b>--<b class='flag-5'>啟動</b>文件--<b class='flag-5'>分析</b>

    stm32啟動過程

    一次性搞定stm32啟動模式與啟動過程一、stm32啟動模式二、從flash啟動過程2.1 數據
    發表于 12-16 16:57 ?8次下載
    <b class='flag-5'>stm32</b><b class='flag-5'>啟動過程</b>

    STM32啟動過程分析

    1. 程序和數據在Flash和SRAM上的存儲結構在講解 STM32 啟動過程之前,我們先來了解一下 STM32 的程序和數據在 Flash 和 SRAM 上到底是如何存儲的,因為有了這方面的知識
    發表于 12-23 19:55 ?12次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>啟動過程</b><b class='flag-5'>分析</b>

    stm32啟動過程詳解

    STM32啟動過程詳解 近年來,STM32微控制器在嵌入式系統中的應用越來越廣泛。STM32微控制器具有高性能、低功耗、易擴展和豐富的外設接口等優勢。而要讓
    的頭像 發表于 12-08 15:47 ?2039次閱讀
    主站蜘蛛池模板: 亚洲最大成人 | 看大片全色黄大色黄 | 色先峰 | www.五月天| 久操视频免费观看 | 毛片2016免费视频 | 亚洲欧洲第一页 | 91日本在线观看亚洲精品 | 久久天天躁狠狠躁夜夜爽蜜月 | 91精品久久国产青草 | 四虎最新网站 | 人与性www | 亚洲系列中文字幕一区二区 | 美女视频网站色 | 免费在线公开视频 | 色婷婷在线观看视频 | 亚洲伊人久久大香线蕉啊 | 欧美综合国产精品日韩一 | 成人影院在线观看 | 亚洲理论片在线观看 | 午夜影视体验区 | 日韩三级在线免费观看 | www.xxx国产| 亚洲视频在线网 | 在线天堂网www资源种子 | 男人j进女人j免费视频视频 | 国产aaa级一级毛片 国产ar高清视频+视频 | 色多多视频在线观看播放 | 日本美女黄视频 | 亚洲bbbbbxxxxx精品三十七 | a亚洲| 一级特级毛片免费 | 天堂网av2014| www.综合色| 婷婷国产 | 一二三区视频 | 又大又粗进出白浆直流动态图 | 免费人成在线观看网站品爱网日本 | 国产网红主播chinese | 一级一片免费播放 | 激情五月俺来也 |