×

不要再找啦,关于Cortex-Mx芯片的启动没有比这里更清楚啦(可下载)

消耗积分:0 | 格式:pdf | 大小:521.36 KB | 2025-03-12

张飞实战电子官方

  • 60内容
  • 1.7w阅读
  • 51粉丝

单片机在上电的时候会经历一个启动的流程,不管是你从手册描述上看得见的,还是看不见的,亦或者你不知道还有这种操作的,这个启动都是客观事实存在的,今天我们就用白话文来唠一唠 Cortex-Mx 系列的启动流程(此文章知识广泛适用于 CPU 为 Cortex-Mx 系列的 MCU)

如上图为 STM32F0 系列单片机系统存储器的映射图(其他系列型号,映射图会有区别,但流程还是一样的),通常,当处理器从复位中启动时,它首先会访问位于 0x0000 0000 地址处的向量表,这个向量表是什么?从哪里来?跟程序员又有什么关系?明确的讲这几个问题跟我们的启动文件是紧密相关的。启动文件就是对启动流程的“展现”,启动文件中包含了向量表(向量表中包含了堆栈指针地址、复位向量程序地址、以及系统中各类中断函数的入口地址,简单点讲就是单片机启动的时候得经过这个向量表,执行复位程序得经过这个向量表,执行中断还得经过向量表,从向量表中找中断函数的入口地址)。当然启动文件也是由程序员写的(只不过大多数由厂家的 Coder 代劳了)。下面我们一起来弄清楚 吧!

上图为厂家参考手册上给出的向量表的部分截图,启动文件中程序员编写的向量表就是根据这个表格来编写的,每一行为向量表的一个组成成员,第一行为表示堆栈指针初始值,第二个字为复位向量地址,后面的行是各种类型的中断向量地址,也就是中断函数的入口地址(在图中第一个字被描述为保留,第二个字描述为复位,这两行内容非常重要!)

前面我们说了一个关键点,当处理器从复位中启动时,它首先会访问 0x00000000 地址处的向量表,并读取向量表的前 2 个字,第一个字为堆栈指针 MSP 初始值(堆栈是一个临时的空间,用来临时存储一些信息,就像电影里面的“龙门客栈”一样,供过往客人临时歇脚。);第二个字为复位向量,它表示程序执行的起始地址。当读取到该地址之后,会自动跳到复位向量处开始执行程序(图 2红框处,最右边的一列地址栏,第一行地址空间从 0x0000 0000 开始 - 0x00000003 结束,第二行从 0x0000 0004 开始-0x0000 0007 结束,后面以此类推,每行占 4 个字节,即 1 个字)

但是比较晕的是:图 1 中大家可以看到,地址 0x0000 0000 处已经存在内容了,是系统 BOOT 的配置,这段内容是厂家固化的一段代码,我们写的代码是存储在从 0x0800 0000 开始往后的地方,即 Main Flash Memory 存储区(见图 1)

那大家想我们写的代码(启动文件也算写的代码的一部分),是放在 FLASH存储区的,而单片机上电的时候是从 0x0000 0000 处开始执行,那么系统是怎么访问到我们自己写的这个向量表呢?

完整版技术文档请点击文章开头普通下载

 

 

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

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !