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

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

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

一文知道MCU上電復(fù)位啟動(dòng)過(guò)程

h1654155282.3538 ? 來(lái)源:陳翠 ? 2019-10-08 10:37 ? 次閱讀

MCU上電(復(fù)位)時(shí),從固定的地址啟動(dòng),一般是地址0x00000000,如ARM7;個(gè)別特殊的如STM32默認(rèn)啟動(dòng)地址為0x8000000(flash區(qū)啟動(dòng))。啟動(dòng)過(guò)程主要完成兩部分工作,一個(gè)是硬件執(zhí)行環(huán)境,如中斷向量表、寄存器看門(mén)狗等,另一個(gè)是軟件環(huán)境,如C庫(kù)環(huán)境、ZI(未初始化的內(nèi)存變量)等。

一、硬件環(huán)境工作

1.初始時(shí)鐘

初始化內(nèi)核時(shí)鐘,主時(shí)鐘,各個(gè)外設(shè)的時(shí)鐘。

2.關(guān)閉看門(mén)狗

看門(mén)狗是用來(lái)監(jiān)控應(yīng)用程序的異常跑飛而復(fù)位CPU,在初始化階段,由于沒(méi)有“喂狗”這一動(dòng)作,有可能導(dǎo)致CPU不斷復(fù)位,因此,首先會(huì)關(guān)閉看門(mén)狗,初始化完,再開(kāi)啟。

3.建立中斷向量表

中斷向量表,中斷源的識(shí)別標(biāo)志,可用來(lái)形成相應(yīng)的中斷服務(wù)程序的入口地址,或者中斷服務(wù)程序入口地址的偏移量和段基值。CPU利用中斷向量表轉(zhuǎn)入中斷服務(wù)程序處理相關(guān)事務(wù)。

4.初始化堆棧寄存器

堆棧的作用一個(gè)就是保存現(xiàn)場(chǎng)(上下文),如函數(shù)調(diào)用或者中斷發(fā)送時(shí),將當(dāng)前執(zhí)行地址壓棧,調(diào)用完成再返回此處執(zhí)行程序。另一個(gè)作用就是保存參數(shù),如臨時(shí)變量。因此,在啟動(dòng)階段需初始化堆棧寄存器、堆棧的大小、起始地址等。

5.內(nèi)存初始化

選擇內(nèi)部或者外部RAM。

二、軟件環(huán)境工作

1.把RO,RW從它們的加載域復(fù)制到它們的運(yùn)行域中去。

2.初始化(清零)ZI域。

3.初始化堆棧指針

4.初始化C庫(kù)環(huán)境

包括C庫(kù)所需的內(nèi)存空間、程序執(zhí)行所需資源、C庫(kù)初始化。

三、CortexM3啟動(dòng)

CortexM3有3種啟動(dòng)方式

1、BOOT1=1BOOT0=1,中斷向量表定位于SRAM區(qū),即起始地址為0x2000000,同時(shí)復(fù)位后PC指針位于0x2000000處。

2、BOOT1=xBOOT0=0,中斷向量表定位于FLASH區(qū),即起始地址為0x8000000,同時(shí)復(fù)位后PC指針位于0x8000000處。

3、BOOT1=0BOOT0=1,中斷向量表定位于內(nèi)置Bootloader區(qū),此時(shí)可通過(guò)串口下載程序的二進(jìn)制文件到flash區(qū)。

而Cortex-M3內(nèi)核規(guī)定,起始地址必須存放堆頂指針,而第二個(gè)地址則必須存放復(fù)位中斷入口向量地址,這樣在Cortex-M3內(nèi)核復(fù)位后,會(huì)自動(dòng)從起始地址的下一個(gè)32位空間取出復(fù)位中斷入口向量,跳轉(zhuǎn)執(zhí)行復(fù)位中斷服務(wù)程序。對(duì)比ARM7/ARM9內(nèi)核,Cortex-M3內(nèi)核則是固定了中斷向量表的位置而起始地址是可變化的。即是對(duì)于flash啟動(dòng)來(lái)說(shuō)(正常工作也是flash啟動(dòng)),0x8000000地址存放的是棧頂?shù)刂穇_initial_sp,0x8000004地址存放的是復(fù)位中斷向量Reset_Handler入口地址(STM32使用32位總線(xiàn),存儲(chǔ)空間為4字節(jié)對(duì)齊);在編寫(xiě)多段程序時(shí),偏移地址空間需注意,如編寫(xiě)一個(gè)BootLoader,從BootLoader到應(yīng)用程序段的相互跳轉(zhuǎn)。

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

    關(guān)注

    146

    文章

    16785

    瀏覽量

    349316
  • 上電復(fù)位
    +關(guān)注

    關(guān)注

    1

    文章

    39

    瀏覽量

    15761
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    電復(fù)位延時(shí)電路

    電復(fù)位延時(shí)電路
    發(fā)表于 12-04 12:12 ?9369次閱讀
    <b class='flag-5'>上</b><b class='flag-5'>電復(fù)位</b>延時(shí)電路

    STM32H7的啟動(dòng)過(guò)程分析

    本章教程主要跟大家講STM32H7的啟動(dòng)過(guò)程,這里的啟動(dòng)過(guò)程是指從CPU電復(fù)位執(zhí)行第1條指令開(kāi)始(匯編文件)到進(jìn)入C程序main()函數(shù)入口之間的部分。
    的頭像 發(fā)表于 10-17 14:42 ?2196次閱讀

    詳解STM32啟動(dòng)過(guò)程

    本章教程主要跟大家講STM32H7的啟動(dòng)過(guò)程,這里的啟動(dòng)過(guò)程是指從CPU電復(fù)位執(zhí)行第1條指令開(kāi)始(匯編文件)到進(jìn)入C程序main()函數(shù)入口之間的部分。
    發(fā)表于 11-14 11:24 ?1788次閱讀

    U-Boot啟動(dòng)過(guò)程--詳細(xì)版的完全分析

    我們知道,bootloader是系統(tǒng)電后最初加載運(yùn)行的代碼。它提供了處理器電復(fù)位后最開(kāi)始需要執(zhí)行的初始化代碼。在PC機(jī)上引導(dǎo)程序般由
    發(fā)表于 12-12 22:50

    講STM32H7的啟動(dòng)過(guò)程

    第13章 STM32H7啟動(dòng)過(guò)程詳解本章教程主要跟大家講STM32H7的啟動(dòng)過(guò)程,這里的啟動(dòng)過(guò)程是指從CPU電復(fù)位執(zhí)行第1條指令開(kāi)始(匯編
    發(fā)表于 08-03 06:15

    STM32F429啟動(dòng)過(guò)程詳解

    第13章 STM32F429啟動(dòng)過(guò)程詳解本章教程主要跟大家講STM32F429的啟動(dòng)過(guò)程,這里的啟動(dòng)過(guò)程是指從CPU電復(fù)位執(zhí)行第1條指令開(kāi)
    發(fā)表于 08-03 06:15

    STM32H7啟動(dòng)過(guò)程詳解

    第13章 STM32H7啟動(dòng)過(guò)程詳解本章教程主要跟大家講STM32H7的啟動(dòng)過(guò)程,這里的啟動(dòng)過(guò)程是指從CPU電復(fù)位執(zhí)行第1條指令開(kāi)始(匯編
    發(fā)表于 08-03 06:41

    電復(fù)位和按鍵復(fù)位區(qū)別

    電復(fù)位是指電壓從無(wú)到有在RESET處會(huì)先處于高電平段時(shí)間,然后由于該點(diǎn)通過(guò)電阻接地,則RESET該點(diǎn)的電平會(huì)逐漸的改變?yōu)榈碗娖?,從而使得單片機(jī)
    發(fā)表于 10-20 15:24 ?11.7w次閱讀
    <b class='flag-5'>上</b><b class='flag-5'>電復(fù)位</b>和按鍵<b class='flag-5'>復(fù)位</b>區(qū)別

    單片機(jī)上電復(fù)位與欠壓復(fù)位過(guò)程解析

    電復(fù)位:是由外部總線(xiàn)產(chǎn)生的種異步復(fù)位,單片機(jī)電壓監(jiān)測(cè)電路檢測(cè)到電源電壓VDD上升時(shí),會(huì)產(chǎn)生個(gè)
    發(fā)表于 03-23 15:14 ?9482次閱讀
    單片機(jī)上<b class='flag-5'>電復(fù)位</b>與欠壓<b class='flag-5'>復(fù)位</b>的<b class='flag-5'>過(guò)程</b>解析

    BootLoader與MCU啟動(dòng)過(guò)程

    ARM之Cortex M3的啟動(dòng)過(guò)程目前,多數(shù)MCU廠(chǎng)商都提供個(gè)啟動(dòng)文件。當(dāng)然,編程者也可以自己編寫(xiě)啟動(dòng)文件,具體編寫(xiě)要求ARM的網(wǎng)站上都
    發(fā)表于 10-25 16:36 ?10次下載
    BootLoader與<b class='flag-5'>MCU</b><b class='flag-5'>啟動(dòng)過(guò)程</b>

    STM32電后啟動(dòng)過(guò)程

    STM32電后啟動(dòng)過(guò)程
    發(fā)表于 11-15 18:21 ?16次下載
    STM32<b class='flag-5'>上</b>電后<b class='flag-5'>啟動(dòng)過(guò)程</b>

    stm32啟動(dòng)過(guò)程

    三個(gè)不同作用的空間在單片機(jī)里面占了三個(gè)空間,單片機(jī)引導(dǎo)哪個(gè)空間資源啟動(dòng),由BOOT1和BOOT0決定!正常來(lái)說(shuō)般是從flash啟動(dòng)?。?!二、從flash啟動(dòng)過(guò)程2.1 數(shù)據(jù)在堆棧中存
    發(fā)表于 12-16 16:57 ?8次下載
    stm32<b class='flag-5'>啟動(dòng)過(guò)程</b>

    STM32電復(fù)位電路參數(shù)選擇

    1.電復(fù)位電路的作用2.電復(fù)位電路工作原理
    發(fā)表于 01-17 12:28 ?26次下載
    STM32<b class='flag-5'>上</b><b class='flag-5'>電復(fù)位</b>電路參數(shù)選擇

    分析ARM Cortex-M內(nèi)核復(fù)位啟動(dòng)過(guò)程

    ARM Cortex-M內(nèi)核的復(fù)位啟動(dòng)過(guò)程也被稱(chēng)為復(fù)位序列(Reset sequence),下面就來(lái)簡(jiǎn)要總結(jié)分析下這一過(guò)程
    的頭像 發(fā)表于 03-20 09:58 ?2168次閱讀

    stm32啟動(dòng)過(guò)程詳解

    啟動(dòng)過(guò)程。本文將詳細(xì)介紹STM32的啟動(dòng)過(guò)程。 、復(fù)位電路 對(duì)于STM32微控制器來(lái)說(shuō),復(fù)位啟動(dòng)
    的頭像 發(fā)表于 12-08 15:47 ?1349次閱讀