91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

分析STM32的三種上電啟動(dòng)過程

汽車玩家 ? 來源: HACK實(shí)驗(yàn)室 ? 作者: HACK實(shí)驗(yàn)室 ? 2020-05-03 18:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

上一篇文章我寫了STM32RAM和Flash,文章最后我建議大家來深入研究一下STM32上電啟動(dòng)過程。同時(shí)有小伙伴留言說想讓我講一下IAP(在線升級程序)。其實(shí)如果搞懂STM32的上電啟動(dòng)過程,那么IAP就可以信手拈來了。下面我們一起來研究研究。

先說啟動(dòng)文件

我們正常在操作一款單片機(jī)的時(shí)候,都是從main函數(shù)開始進(jìn)行編程的,但是單片機(jī)上電是從main函數(shù)開始執(zhí)行的嗎?答案當(dāng)然是否定的,在main函數(shù)之前單片機(jī)最先執(zhí)行的是硬件設(shè)置SP、PC然后是“啟動(dòng)文件”,一般主要是項(xiàng)目文件里面的startup_xxxxx.s文件。其實(shí)這個(gè)就是我們常說的Bootloader。

其實(shí)不光STM32系列單片機(jī)是這樣,我們接觸的NXP微控制器、TIMSP430以及51單片機(jī)等等其實(shí)都是有上述的啟動(dòng)文件的。啟動(dòng)文件負(fù)責(zé)的就是從單片機(jī)復(fù)位開始到main函數(shù)之前這段時(shí)間所需要進(jìn)行的工作。我們一般很少接觸啟動(dòng)文件的主要原因是開發(fā)環(huán)境往往給開發(fā)者自動(dòng)的提供了這個(gè)啟動(dòng)文件,不需要我們再去操心,直接從main函數(shù)開始進(jìn)行設(shè)計(jì)就可以了。

STM32三種啟動(dòng)方式

接觸過STM32系列單片機(jī)的朋友應(yīng)該知道STM32有三種啟動(dòng)模式,用戶可以通過設(shè)置BOOT0和BOOT1的引腳電平狀態(tài),來選擇復(fù)位后的啟動(dòng)模式。

需要注意的是STM32上電復(fù)位以后,代碼區(qū)都是從0x00000000開始的,三種啟動(dòng)模式只是將各自存儲(chǔ)空間的地址映射到0x00000000中。

1)從Flash啟動(dòng),將Flash地址0x08000000映射到0x00000000,這樣啟動(dòng)以后就相當(dāng)于從0x08000000開始的,這是我們最常用的模式;

2)從SRAM啟動(dòng),將SRAM地址0x20000000映射到0x00000000,這樣啟動(dòng)以后就相當(dāng)于從0x20000000開始的,用于調(diào)試,筆者基本沒用過;

3)從系統(tǒng)存儲(chǔ)器啟動(dòng)(可以看上篇文章里的內(nèi)存映射圖,System memory),將系統(tǒng)存儲(chǔ)器地址0x1FFFF000映射到0x00000000,這樣啟動(dòng)以后就相當(dāng)于從0x1FFFF000開始執(zhí)行的,值得注意的是這個(gè)系統(tǒng)存儲(chǔ)器里面存儲(chǔ)的其實(shí)是STM32自帶的Bootloader代碼,這其實(shí)是一個(gè)官方的IAP,它提供了可以通過UART1接口將用戶的代碼下載到Flash中的功能,下載完以后再切換到從Flash中啟動(dòng)就可以正常運(yùn)行了。打個(gè)比方這個(gè)官方的Bootloader就相當(dāng)于我們玩路由器時(shí)的“不死breed”。筆者之前在調(diào)STM32低功耗的時(shí)候?qū)⑾螺d口給復(fù)用了其他功能導(dǎo)致“變磚”,就是通過這種方式恢復(fù)的

分析STM32的三種上電啟動(dòng)過程

切回正題

下面我們來具體看一下從用戶的Flash啟動(dòng)STM32,從上電到main函數(shù)之間的這段時(shí)間都做了什么。

1)第一步是硬件設(shè)置SP、PC

我們參考《Cortex-M3權(quán)威指南》向量表章節(jié)表7.6,如下圖所示:

分析STM32的三種上電啟動(dòng)過程

前兩段地址主要是用來指定SP和PC的初值,上一節(jié)我們已經(jīng)知道了映射關(guān)系,所以這時(shí)已自動(dòng)從0x08000000位置處讀取數(shù)據(jù)賦值給了棧指針SP,從0x08000004位置處讀取數(shù)據(jù)賦值給了PC。需要注意的是這個(gè)復(fù)位向量初始值并不是固定的,可以通過一個(gè)叫“向量表偏移量寄存器”來修改定位。

分析STM32的三種上電啟動(dòng)過程

下圖是我們那個(gè)開源OLED時(shí)鐘項(xiàng)目的HEX文件,用J-Flash打開就可以看到設(shè)置完的SP=0x20005B88,PC=0x0800282D。

分析STM32的三種上電啟動(dòng)過程

2)第二步是設(shè)置系統(tǒng)時(shí)鐘

我們接著來追蹤系統(tǒng)的運(yùn)行軌跡,上面我們已經(jīng)知道了PC的地址為0x0800282D,但是這沒有遵循4字節(jié)對齊,我們將其對齊為0x0800282C,這時(shí)我們打開項(xiàng)目文件里面的.map文件,找到這個(gè)地址,如下圖示:

分析STM32的三種上電啟動(dòng)過程

我們發(fā)現(xiàn)來到了第一節(jié)說的startup_xxxxx.s文件,我們打開startup文件找到:

分析STM32的三種上電啟動(dòng)過程

我們發(fā)現(xiàn)運(yùn)行到了SystemInit,C的世界我們就不陌生了,在項(xiàng)目文件的system_stm32f10x.c里面可以找到SystemInit函數(shù),也就是初始化系統(tǒng)時(shí)鐘了。

3)第三步是___main

到這里大家可能會(huì)以為已經(jīng)到了main函數(shù)了,其實(shí)不是這樣的。___main和main是不一樣的,我們尋找這個(gè)___main會(huì)發(fā)現(xiàn)找不到,startup文件里面沒有,map文件里面也沒有。其實(shí)它是在MDK自帶的庫里面了,主要的功能是軟件設(shè)置SP、加載.data.bss并初始化棧區(qū)。由于需要在線跟蹤才能看到,我在這里就不給大家列出來了,感興趣的朋友可以深入研究一下。

4)最后來到C的世界

在執(zhí)行到___main的最后就跳轉(zhuǎn)到了C文件的main函數(shù)了。

最后用一張圖來整體看一下流程:

分析STM32的三種上電啟動(dòng)過程

總 結(jié)

到這里STM32的存儲(chǔ)器以及上電啟動(dòng)過程就完整的總結(jié)完了,希望對大家有所幫助,大家如果感興趣可以在調(diào)試STM32的時(shí)候一步一步的來跟蹤一下看看,每一款單片機(jī)的啟動(dòng)文件其實(shí)都是很值得玩味的,對我們系統(tǒng)的來體會(huì)控制器的架構(gòu)、指令集、中斷向量等內(nèi)容是很有幫助的。大家如果將啟動(dòng)過程了解清楚了對我們后面來進(jìn)行IAP等有意思的操作是很有幫助的。

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

    關(guān)注

    2309

    文章

    11162

    瀏覽量

    373444
  • IAP
    IAP
    +關(guān)注

    關(guān)注

    2

    文章

    169

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    變頻器起動(dòng)過程曲線參數(shù)怎么設(shè)置

    變頻器起動(dòng)過程曲線參數(shù)的設(shè)置是工業(yè)自動(dòng)化控制中的關(guān)鍵技術(shù)環(huán)節(jié),直接影響電機(jī)啟動(dòng)性能、設(shè)備壽命及能耗效率。以下是基于工程實(shí)踐和理論分析的詳細(xì)設(shè)置指南: 一、基礎(chǔ)參數(shù)理解 1. 加速時(shí)間
    的頭像 發(fā)表于 01-23 12:03 ?190次閱讀
    變頻器起<b class='flag-5'>動(dòng)過程</b>曲線參數(shù)怎么設(shè)置

    請問CW32芯片的三種工作模式是什么?

    CW32芯片的三種工作模式是什么?
    發(fā)表于 12-26 06:48

    CW32系統(tǒng)發(fā)啟動(dòng)過程

    CW32支持 2 不同的啟動(dòng)模式,通過 BOOT 引腳狀態(tài)進(jìn)行選擇,啟動(dòng)模式選擇電路只在芯片解復(fù)位時(shí)刻采樣 BOOT 引腳狀態(tài),因此在芯片解復(fù)位前用戶必須根據(jù)需要設(shè)置好BOOT 引腳的電平狀態(tài),以
    發(fā)表于 12-15 07:54

    CW32時(shí)鐘的啟動(dòng)過程

    CW32F030 的時(shí)鐘源啟動(dòng)過程類似,當(dāng)設(shè)置 SYSCTRL_CR1.HSEEN 為 1 后,HSE 時(shí)鐘振蕩電路開始工作,但此時(shí)輸出的時(shí)鐘信號振幅很小。經(jīng)過啟動(dòng)時(shí)間階段后,輸出時(shí)鐘信號的振幅
    發(fā)表于 11-13 07:49

    三種SPWM波形生成算法的分析與實(shí)現(xiàn)

    摘要:變頻技術(shù)作為現(xiàn)代電力電子的核心技術(shù),集現(xiàn)代電子、信息和智能技術(shù)于一體。而SPW(正弦波脈寬調(diào)制)波的產(chǎn)生和控制則是變頻技術(shù)的核心之一。本文對SPI波形生成的三種算法-對稱規(guī)則采樣法、不對稱規(guī)則
    發(fā)表于 07-31 13:34

    MEMS中的三種測溫方式

    在集成MEMS芯片的環(huán)境溫度測量領(lǐng)域,熱阻、熱電堆和PN結(jié)原理是三種主流技術(shù)。熱阻是利用熱敏電阻,如金屬鉑或注入硅的溫度電阻系數(shù)恒定,即電阻隨溫度線性變化的特性測溫,電阻變化直接對應(yīng)絕對溫度,需恒流源供電。
    的頭像 發(fā)表于 07-16 13:58 ?1667次閱讀
    MEMS中的<b class='flag-5'>三種</b>測溫方式

    繞線轉(zhuǎn)子永磁電機(jī)啟動(dòng)過程準(zhǔn)時(shí)間最優(yōu)控制

    摘要:繞線轉(zhuǎn)子永磁電機(jī)(WR-PMM)轉(zhuǎn)子斬波調(diào)阻啟動(dòng)是一便捷有效的啟動(dòng)控制策略。通過斬波調(diào)阻的方法實(shí)時(shí)調(diào)節(jié)轉(zhuǎn)子外接電阻,能使啟動(dòng)過程中平均轉(zhuǎn)矩始終保持最大值,實(shí)現(xiàn)繞線轉(zhuǎn)子永磁電機(jī)
    發(fā)表于 06-12 13:50

    繞線電機(jī)啟動(dòng)狀態(tài)到雙饋狀態(tài)過渡過程的研究

    摘要:比較了雙饋電機(jī)的兩啟動(dòng)方案,分析了電機(jī)定子側(cè)電源的幅值及轉(zhuǎn)子側(cè)勵(lì)磁電源的幅值、頻率對雙饋電機(jī)過渡過程的影響,并探討了勛磁電源的頻率與牽人雙饋狀態(tài)允許的最大轉(zhuǎn)差之間的關(guān)系。分別以
    發(fā)表于 06-12 13:40

    晶閘管控制異步電機(jī)軟啟動(dòng)過程中振蕩現(xiàn)象研究

    純分享帖,需要者可點(diǎn)擊附件免費(fèi)獲取完整資料~~~*附件:晶閘管控制異步電機(jī)軟啟動(dòng)過程中振蕩現(xiàn)象研究.pdf【免責(zé)聲明】本文系網(wǎng)絡(luò)轉(zhuǎn)載,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請第一時(shí)間告知,刪除內(nèi)容!
    發(fā)表于 06-04 14:39

    介紹三種常見的MySQL高可用方案

    在生產(chǎn)環(huán)境中,為了確保數(shù)據(jù)庫系統(tǒng)的連續(xù)可用性、降低故障恢復(fù)時(shí)間以及實(shí)現(xiàn)業(yè)務(wù)的無縫切換,高可用(High Availability, HA)方案至關(guān)重要。本文將詳細(xì)介紹三種常見的 MySQL 高可用
    的頭像 發(fā)表于 05-28 17:16 ?1240次閱讀

    電機(jī)軟啟動(dòng)器無故障報(bào)警停機(jī)原因分析與控制系統(tǒng)改造

    相全控橋式整流電路。使用軟啟動(dòng)啟動(dòng)電動(dòng)機(jī)時(shí),晶閘管的輸出電壓逐漸增加,電動(dòng)機(jī)逐漸加速,直到晶閘管全導(dǎo)通,電動(dòng)機(jī)工作在額定電壓的機(jī)械特性,實(shí)現(xiàn)平滑
    發(fā)表于 04-27 19:29

    redis三種集群方案詳解

    在Redis中提供的集群方案總共有三種(一般一個(gè)redis節(jié)點(diǎn)不超過10G內(nèi)存)。
    的頭像 發(fā)表于 03-31 10:46 ?1531次閱讀
    redis<b class='flag-5'>三種</b>集群方案詳解

    GaN、超級SI、SiC這三種MOS器件的用途區(qū)別

    如果想要說明白GaN、超級SI、SiC這三種MOS器件的用途區(qū)別,首先要做的是搞清楚這三種功率器件的特性,然后再根據(jù)材料特性分析具體應(yīng)用。
    的頭像 發(fā)表于 03-14 18:05 ?2722次閱讀

    STM32F103做從站 過程,上位機(jī)不斷發(fā)送數(shù)據(jù)造成,通訊失敗怎么解決?

    主機(jī)上掛了多個(gè)STM32 485從站, 主機(jī)不斷輪詢發(fā)送數(shù)據(jù),STM32過程中如果主站已經(jīng)在不斷發(fā)送數(shù)據(jù)了就
    發(fā)表于 03-13 08:11

    STM32啟動(dòng)過程分享

    復(fù)位后的啟動(dòng)模式。xa0 xa0 需要注意的是STM32電復(fù)位以后,代碼區(qū)都是從0x00000000開始的,三種啟動(dòng)模式只是將各自存儲(chǔ)空間
    發(fā)表于 03-07 08:09