stm32的启动分析

stm32的启动分析

ID:10194611

大小:143.38 KB

页数:3页

时间:2018-06-12

stm32的启动分析_第1页
stm32的启动分析_第2页
stm32的启动分析_第3页
资源描述:

《stm32的启动分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、STM32的启动分析一、STM32的复位序列当STM32产生复位后,做的第一件事就是读取下列两个32位整数的值:1、从地址0x0000,0000处取出MSP(主堆栈指针)的初始值放入MSP寄存器中;2、从地址0x0000,0004处取出复位向量放入PC寄存器中,然后从PC中存取的地址出取指并开始执行。图1:复位序列请注意,这与传统的ARM架构以及其他的单片机完全不同,他们复位后一般是从0x0000,0000地址处取出第一条指令并执行,而一般0x0000,0000都是一条跳转指令。而在STM32中,在0地址处提供的是MSP的初始值,然后紧跟着

2、就是向量表(上电复位时向量表是被默认放在0x04地址处,但是通过修改向量表偏移量寄存器(VTOR)可以将其定义在其他位置)。另外,向量表中的数值是32位的地址,而不是跳转指令,系统会自动将该数值存入PC寄存器中后从该32为地址指向的地址出开始执行,这有点像指针的指针。图2:初始化MSP及PC的初始化的一个范例因为SMT32使用的是向下生长的满栈,所以MSP初始值必须是堆栈内存的末地址加1。举例来说,如果你的堆栈区域在0x20007C00-0x20007FFF之间,那么MSP的初始值就必须是0x20008000。向量表跟随在MSP的初始化之后

3、——也就是第2个标目。要注意因为STM32是在Thumb态下执行,所以向量表中每个数值必须把LSB(最低权重位)置1.正是因为这个原因,图2中就是用0x101来表示0x100.当0x100处的指令得到执行后,就正是开始了程序的执行。在这之前MSP是必须的,因为可能第1条指令还没来得及执行,就发生了NMI(不可屏蔽中断)或者其他的Fault,MSP初始化好后就已经为他们的服务例程准备好了堆栈。二、STM32的3种启动模式在STM32中,可以通过BOOT[1:0]引脚选择三种不同的启动模式,如表1:表1:STM32的三种启动模式根据选定的启动模

4、式,主闪存存储器、系统存储器或SRAM可以按照以下方式访问:1、从主闪存存储器启动:主闪存存储器被映射到启动空间(0x0000,0000),但仍然能够在原有的地址(0x8000,0000)访问它,即闪存存储器的内容可以在两个地址区域访问,0x0000,0000或者0x8000,0000.2、1、从系统存储器启动:系统存储器被映射到启动空间(0x0000,0000),但仍然能够在原有的地址(0x1FFF,F000)访问它。3、从内置SRAM启动:只能在0x2000,0000开始的地址区访问SARM。当从内置的SRAM中启动,在应用程序的初始化

5、代码中,必须使用NVIC的异常表和偏移寄存器,从新映射向量表到SRAM之中。一、STM32的启动代码STM32的启动代码在startup_stm32_hd.s中Reset_HandlerLDRR0,=SystemInitBLXR0LDRR0,=__iar_program_startBXR0

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。