stm32的启动分析.docx_第1页
stm32的启动分析.docx_第2页
stm32的启动分析.docx_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

STM32的启动分析一、 STM32的复位序列当STM32产生复位后,做的第一件事就是读取下列两个32位整数的值:1、 从地址0x0000,0000处取出MSP(主堆栈指针)的初始值放入MSP寄存器中;2、 从地址0x0000,0004处取出复位向量放入PC寄存器中,然后从PC中存取的地址出取指并开始执行。图1:复位序列请注意,这与传统的ARM架构以及其他的单片机完全不同,他们复位后一般是从0x0000,0000地址处取出第一条指令并执行,而一般0x0000,0000都是一条跳转指令。而在STM32中,在0地址处提供的是MSP的初始值,然后紧跟着就是向量表(上电复位时向量表是被默认放在0x04地址处,但是通过修改向量表偏移量寄存器(VTOR)可以将其定义在其他位置)。另外,向量表中的数值是32位的地址,而不是跳转指令,系统会自动将该数值存入PC寄存器中后从该32为地址指向的地址出开始执行,这有点像指针的指针。图2:初始化MSP及PC的初始化的一个范例因为SMT32使用的是向下生长的满栈,所以MSP初始值必须是堆栈内存的末地址加1。举例来说,如果你的堆栈区域在0x20007C00-0x20007FFF之间,那么MSP的初始值就必须是0x20008000。向量表跟随在MSP的初始化之后也就是第2个标目。要注意因为STM32是在Thumb态下执行,所以向量表中每个数值必须把LSB(最低权重位)置1.正是因为这个原因,图2中就是用0x101来表示0x100.当0x100处的指令得到执行后,就正是开始了程序的执行。在这之前MSP是必须的,因为可能第1条指令还没来得及执行,就发生了NMI(不可屏蔽中断)或者其他的Fault,MSP初始化好后就已经为他们的服务例程准备好了堆栈。二、STM32的3种启动模式在STM32中,可以通过BOOT1:0引脚选择三种不同的启动模式,如表1:表1:STM32的三种启动模式根据选定的启动模式,主闪存存储器、系统存储器或SRAM可以按照以下方式访问:1、 从主闪存存储器启动:主闪存存储器被映射到启动空间(0x0000,0000),但仍然能够在原有的地址(0x8000,0000)访问它,即闪存存储器的内容可以在两个地址区域访问,0x0000,0000或者0x8000,0000.2、 1、从系统存储器启动:系统存储器被映射到启动空间(0x0000,0000),但仍然能够在原有的地址(0x1FFF,F000)访问它。3、 从内置SRAM启动:只能在0x2000,0000开始的地址区访问SARM。当从内置的SRAM中启动,在应用程序的初始化代码中,必须使用NVIC的异常表和偏移寄存器,从新映射向量表到SRAM之中。二、 STM32的启动代码STM32的启动代码在startup_stm32_hd.s中Reset_Handle

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论