历史上的今天
返回首页

历史上的今天

今天是:2025年08月14日(星期四)

正在发生

2018年08月14日 | STM32启动过程与向量表

2018-08-14 来源:eefocus

一.首先看一下一个典型的STM32程序的二进制文件:


注意开始地址的前2“字”,0x2000870,0x08000635.

二.在工程文件里,进入debug模式,点击 “RET”复位


发现MSP就是程序文件的第一个32bit内容,PC则是下一个32bit内容。注意0x08000635与0x08000634:加载到 PC 的数值是奇数( LSB=1) ,表明这是在
Thumb 状态下执行,因为Cortex-M3处理器不能执行ARM指令;另一方面, CM3 中的指令至少是半字对齐的,所以 PC 的 LSB 总是读回 0。

三.再看下STM32的启动文件下的中断向量表


事实上,可以明显地看出,STM32程序的文件的开始地址位置就是存放了这个中断向量表。

四.stm32的启动汇编文件中

                AREA    RESET, DATA, READONLY

                EXPORT  __Vectors

                EXPORT  __Vectors_End

                EXPORT  __Vectors_Size

 

__Vectors       DCD     __initial_sp              ; Top of Stack

                DCD     Reset_Handler             ; Reset Handler

代码本身只是定义一个代码段,而负责将它定位在绝对零位置的是分散加载文件(.sct)。

LR_IROM1 0x08000000 0x00010000  {    ; load region size_region

  ER_IROM1 0x08000000 0x00010000  {  ; load address = execution address

   *.o (RESET, +First)

   *(InRoot$$Sections)

   .ANY (+RO)

  }

  RW_IRAM1 0x20000000 0x00005000  {  ; RW data

   .ANY (+RW +ZI)

  }

}

可以看到 RESET 段被定位到0x08000000+0位置。



五.现在可以理清STM32的启动过程了:1.上电后,STM32根据BOOT0/BOOT1的状态设置启动地址(例如BOOT0=0则将主存储器地址0x08000000设为启动地址);2.从启动地址读MSP与PC,程序通过此PC跳至复位中断Reset_Handler。3.这时程序才真正开始;Reset_Handler中断程序可自由编写,但是


 LDR     R0, =__main

         BX      R0

这句通常少不了(除非你自己花时间写)。__main是一个库函数,这个函数为STM32做了很多准备工作例如RO/RW的搬运,ZI清零,堆栈初始化,最后跳转到真正的用户main()函数。


推荐阅读

史海拾趣

广东长利光电(Changli Optoelectronic)公司的发展小趣事

在广东长利光电的发展历程中,公司始终注重企业文化建设和社会责任履行。公司倡导“以人为本、诚信务实、创新进取”的价值观,为员工提供了良好的工作环境和培训机会。同时,公司还积极参与社会公益事业,为社区的发展和环境保护做出了贡献。这些举措不仅提升了公司的品牌形象,还增强了员工的归属感和凝聚力。

以上五个故事,展现了广东长利光电在电子行业的发展历程和取得的成就。从初创时期的坚持与创新,到质量管理的突破,再到市场拓展与全球化布局,以及技术升级与产品创新,最后到企业文化建设与社会责任履行,每一个阶段都充满了挑战与机遇。广东长利光电正是凭借着对LED技术的深刻理解和市场需求的敏锐洞察,不断创新和发展,成为了电子行业中的佼佼者。

Greatbatch-Sierra Inc公司的发展小趣事

在广东长利光电的发展历程中,公司始终注重企业文化建设和社会责任履行。公司倡导“以人为本、诚信务实、创新进取”的价值观,为员工提供了良好的工作环境和培训机会。同时,公司还积极参与社会公益事业,为社区的发展和环境保护做出了贡献。这些举措不仅提升了公司的品牌形象,还增强了员工的归属感和凝聚力。

以上五个故事,展现了广东长利光电在电子行业的发展历程和取得的成就。从初创时期的坚持与创新,到质量管理的突破,再到市场拓展与全球化布局,以及技术升级与产品创新,最后到企业文化建设与社会责任履行,每一个阶段都充满了挑战与机遇。广东长利光电正是凭借着对LED技术的深刻理解和市场需求的敏锐洞察,不断创新和发展,成为了电子行业中的佼佼者。

DC Components公司的发展小趣事

随着电子行业的快速发展,技术创新成为企业发展的重要动力。DC Components公司紧跟行业趋势,积极引进先进技术,加大研发投入,不断推出具有竞争力的新产品。这些新产品不仅满足了市场的多样化需求,还为公司的发展注入了新的活力。

三环(CCTC)公司的发展小趣事

面对全球化的市场趋势和竞争压力,三环(CCTC)公司制定了国际化战略和全球布局计划。公司将继续加大研发投入力度,提升自主创新能力;同时积极拓展国际市场,加强与国际知名企业的合作与交流;此外还将加强人才培养和引进工作,打造一支高素质、专业化的国际化团队。通过这些措施的实施,三环(CCTC)公司将不断提升自身实力和市场竞争力,为成为全球领先的电子企业而不懈努力。

Component General Inc公司的发展小趣事

Component General Inc公司的创立,标志着电子行业中一颗新星的升起。自XXXX年成立以来,公司始终致力于射频/微波设计领域的研发与生产。起初,公司只有几名创始人和一些基础的研发设备,但他们凭借着对技术的热情和执着,成功地开发出了首款高功率电阻器,这为公司后续的发展奠定了坚实的基础。

Box Enclosures公司的发展小趣事

Box Enclosures公司自创立之初,就明确了自己的定位——专注于为电子行业提供高品质的机箱和外壳产品。公司始终坚持严格的质量控制标准,从原材料采购到生产工艺,每一个环节都力求精益求精。这种对品质的执着追求,使得Box Enclosures的产品在市场上赢得了良好的口碑,逐渐在电子行业中占据了一席之地。

问答坊 | AI 解惑

STM32学习笔记之ADC

STM32学习笔记之ADC…

查看全部问答>

各种常用的芯片型号一览!全面实用!

里面有很多芯片型号,寻找方便!…

查看全部问答>

开关电源变压器铁芯磁滞回线测量-part1开关电源原理与设计(连载59)

2-1-1-9.开关电源变压器铁芯磁滞回线测量 现代电子设备对电源的工作效率和体积以及安全要求越来越高,在开关电源中决定工作效率和体积以及安全要求的诸多因素,基本上都与开关变压器有关,而与开关变压器技术性能相关最大的要算是变压器的铁芯材 ...…

查看全部问答>

stc单片机测频率问题

我用STC单片机测量频率(0-26HZ).频率信号由外部中断1—INT1引进,采用下降沿触发方式,由TIMER1测量两个下降沿之间的时间。我写的程序只能测量1—3HZ的,频率再高一点就乱跳 下面是我的代码。主程序应该没什么问题,已经调好久了,就是找不出原因 ...…

查看全部问答>

IIC驱动

请问一下,IIC的流驱动程序的流程是怎样的?最好能够给出代码并且讲解,谢谢??…

查看全部问答>

请问哪里有DHCP CLIENT方面的资料啊

小弟想在VxWorks上开发DHCP客户端 请问哪里有这方面的资料啊 谢谢各位了…

查看全部问答>

网上找到的一个 拆解应急灯

这几天为咱活动 找一些相关的资料参考 准备好好参与下   找到了哥们暴力拆解应急灯的图 呵呵 转载一下     转自数码之家 …

查看全部问答>

ST原装的FlashLoaderv1.2怎么只提供了COM1和COM2选择?

                                 这是很不方便的,有很多用笔记本电脑的没有COM1和COM2,都用USB转出来的串口,一般都在串口4以上,建议ST把可用的 ...…

查看全部问答>

①F2812 XINT1中断后,程序总是跑飞??

问题有两个: 1。 为什么xint1的中断函数中要再次使能group1中断(下面代码中①)和总中断使能(下面代码中②)即使没有关闭中断(DINT)?其它的比如TIMER1,PWM,CAPTURE等中断则不需要在服务程序中再次使能 2。进入XINT1中断后,程序总是跑飞?? ...…

查看全部问答>