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

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

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

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

h1654155282.3538 ? 來源:陳翠 ? 2019-10-08 10:37 ? 次閱讀

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

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

1.初始時鐘

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

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

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

3.建立中斷向量表

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

4.初始化堆棧寄存器

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

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

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

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

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

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

3.初始化堆棧指針

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

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

三、CortexM3啟動

CortexM3有3種啟動方式

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

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

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

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

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

    關(guān)注

    146

    文章

    16885

    瀏覽量

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

    關(guān)注

    1

    文章

    39

    瀏覽量

    15771
收藏 人收藏

    評論

    相關(guān)推薦

    電復(fù)位延時電路

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

    STM32H7的啟動過程分析

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

    詳解STM32啟動過程

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

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

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

    講STM32H7的啟動過程

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

    STM32F429啟動過程詳解

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

    STM32H7啟動過程詳解

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

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

    電復(fù)位是指電壓從無到有在RESET處會先處于高電平段時間,然后由于該點通過電阻接地,則RESET該點的電平會逐漸的改變?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ù)位過程解析

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

    BootLoader與MCU啟動過程

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

    STM32電后啟動過程

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

    stm32啟動過程

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

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

    stm32啟動過程詳解

    啟動過程。本文將詳細(xì)介紹STM32的啟動過程。 復(fù)位電路 對于STM32微控制器來說,復(fù)位啟動
    的頭像 發(fā)表于 12-08 15:47 ?1466次閱讀