0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文知道MCU上电复位启动过程

h1654155282.3538 来源:陈翠 2019-10-08 10:37 次阅读

MCU上电(复位)时,从固定的地址启动,一般是地址0x00000000,如ARM7;个别特殊的如STM32默认启动地址为0x8000000(flash区启动)。启动过程主要完成两部分工作,一个是硬件执行环境,如中断向量表、寄存器看门狗等,另一个是软件环境,如C库环境、ZI(未初始化的内存变量)等。

一、硬件环境工作

1.初始时钟

初始化内核时钟,主时钟,各个外设的时钟。

2.关闭看门狗

看门狗是用来监控应用程序的异常跑飞而复位CPU,在初始化阶段,由于没有“喂狗”这一动作,有可能导致CPU不断复位,因此,首先会关闭看门狗,初始化完,再开启。

3.建立中断向量表

中断向量表,中断源的识别标志,可用来形成相应的中断服务程序的入口地址,或者中断服务程序入口地址的偏移量和段基值。CPU利用中断向量表转入中断服务程序处理相关事务。

4.初始化堆栈寄存器

堆栈的作用一个就是保存现场(上下文),如函数调用或者中断发送时,将当前执行地址压栈,调用完成再返回此处执行程序。另一个作用就是保存参数,如临时变量。因此,在启动阶段需初始化堆栈寄存器、堆栈的大小、起始地址等。

5.内存初始化

选择内部或者外部RAM

二、软件环境工作

1.把RO,RW从它们的加载域复制到它们的运行域中去。

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

3.初始化堆栈指针

4.初始化C库环境

包括C库所需的内存空间、程序执行所需资源、C库初始化。

三、CortexM3启动

CortexM3有3种启动方式

1、BOOT1=1BOOT0=1,中断向量表定位于SRAM区,即起始地址为0x2000000,同时复位后PC指针位于0x2000000处。

2、BOOT1=xBOOT0=0,中断向量表定位于FLASH区,即起始地址为0x8000000,同时复位后PC指针位于0x8000000处。

3、BOOT1=0BOOT0=1,中断向量表定位于内置Bootloader区,此时可通过串口下载程序的二进制文件到flash区。

而Cortex-M3内核规定,起始地址必须存放堆顶指针,而第二个地址则必须存放复位中断入口向量地址,这样在Cortex-M3内核复位后,会自动从起始地址的下一个32位空间取出复位中断入口向量,跳转执行复位中断服务程序。对比ARM7/ARM9内核,Cortex-M3内核则是固定了中断向量表的位置而起始地址是可变化的。即是对于flash启动来说(正常工作也是flash启动),0x8000000地址存放的是栈顶地址__initial_sp,0x8000004地址存放的是复位中断向量Reset_Handler入口地址(STM32使用32位总线,存储空间为4字节对齐);在编写多段程序时,偏移地址空间需注意,如编写一个BootLoader,从BootLoader到应用程序段的相互跳转。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    145

    文章

    15989

    浏览量

    343340
  • 上电复位
    +关注

    关注

    1

    文章

    38

    浏览量

    15625
收藏 人收藏

    评论

    相关推荐

    STM32H7的启动过程分析

    本章教程主要跟大家讲STM32H7的启动过程,这里的启动过程是指从CPU上电复位执行第1条指令开始(汇编文件)到进入C程序main()函数入口之间的部分。
    的头像 发表于 10-17 14:42 1608次阅读

    详解STM32启动过程

    本章教程主要跟大家讲STM32H7的启动过程,这里的启动过程是指从CPU上电复位执行第1条指令开始(汇编文件)到进入C程序main()函数入口之间的部分。
    发表于 11-14 11:24 1625次阅读

    AVR单片机的复位:看门狗复位电复位、掉电复位

    AVR单片机的复位:看门狗复位电复位、掉电复位看到大家对复位特别是AVR单片机内部的
    发表于 10-26 11:10

    U-Boot启动过程--详细版的完全分析

    我们知道,bootloader是系统电后最初加载运行的代码。它提供了处理器电复位后最开始需要执行的初始化代码。在PC机上引导程序般由
    发表于 12-12 22:50

    芯片电复位和硬件复位延迟定时

    芯片电复位和硬件复位延迟定时时间般为39ms~100ms,不同芯片电复位和硬件
    发表于 03-24 11:17

    怎么样用外部复位电路对MCU系列芯片进行复位

    启动到稳定的时间较长的低频振荡器,我们需要用外部的电复位电路来延长复位,以保证复位的正常进行。如图1.1所示,
    发表于 03-24 11:23

    讲STM32H7的启动过程

    第13章 STM32H7启动过程详解本章教程主要跟大家讲STM32H7的启动过程,这里的启动过程是指从CPU电复位执行第1条指令开始(汇编
    发表于 08-03 06:15

    STM32F429启动过程详解

    第13章 STM32F429启动过程详解本章教程主要跟大家讲STM32F429的启动过程,这里的启动过程是指从CPU电复位执行第1条指令开
    发表于 08-03 06:15

    STM32H7启动过程详解

    第13章 STM32H7启动过程详解本章教程主要跟大家讲STM32H7的启动过程,这里的启动过程是指从CPU电复位执行第1条指令开始(汇编
    发表于 08-03 06:41

    BootLoader与MCU启动过程

    ARM之Cortex M3的启动过程目前,多数MCU厂商都提供一个启动文件。当然,编程者也可以自己编写启动文件,具体编写要求ARM的网站上都有相关文档进行说明。下面分析一下STM32
    发表于 10-25 16:36 10次下载
    BootLoader与<b class='flag-5'>MCU</b><b class='flag-5'>启动过程</b>

    MCU 是如何从上电复位运行到 main 函数的?

    概念复位就类似于我们的个人 PC 重启一样,又比 PC 的重启要简单一些。引起复位的原因也是多种多样,笔者在这里大致列出以下几种:上电复位,也就是我们给我们的 MCU 通电后,其实也是
    发表于 10-28 18:51 5次下载
    <b class='flag-5'>MCU</b> 是如何从上<b class='flag-5'>电复位</b>运行到 main 函数的?

    STM32上电后启动过程

    STM32上电后启动过程
    发表于 11-15 18:21 16次下载
    STM32上电后<b class='flag-5'>启动过程</b>

    stm32启动过程

    一次性搞定stm32启动模式与启动过程一、stm32启动模式二、从flash启动过程2.1 数据在堆栈中存储方式2.2 stm32的正常启动过程
    发表于 12-16 16:57 8次下载
    stm32<b class='flag-5'>启动过程</b>

    分析ARM Cortex-M内核复位启动过程

    ARM Cortex-M内核的复位启动过程也被称为复位序列(Reset sequence),下面就来简要总结分析下这一过程
    的头像 发表于 03-20 09:58 1635次阅读

    stm32启动过程详解

    了解它的启动过程。本文将详细介绍STM32的启动过程。 一、复位电路 对于STM32微控制器来说,复位启动的第一步。任何系统都需要一个稳定
    的头像 发表于 12-08 15:47 682次阅读