STM32启动概述

合集下载

解析STM32启动过程

解析STM32启动过程

解析STM32启动过程
STM32启动过程是指当电源被接通时,STM32芯片进行自检并加载固
件的过程。

这个过程可以分为四个主要阶段:复位阶段、时钟初始化阶段、中断向量表重定位阶段和主函数执行阶段。

时钟初始化阶段是STM32启动的第二个阶段。

在复位阶段,系统时钟
会被配置为默认的内部RC振荡器,通常为8MHz。

在时钟初始化阶段,可
以通过程序代码来配置系统时钟,包括选择和配置时钟源、设置时钟分频等。

时钟的初始化是系统正常运行的前提条件,因为大多数外设的工作频
率都与系统时钟相关。

主函数执行阶段是STM32启动的最后一个阶段。

在中断向量表重定位
完成后,主函数会被调用执行。

主函数中通常会初始化系统的各种外设,
配置时钟、GPIO、中断等,并进入一个无限循环等待外设事件的发生。


旦外设事件发生,会触发中断,处理对应的中断服务程序。

总结来说,STM32启动过程包括复位阶段、时钟初始化阶段、中断向
量表重定位阶段和主函数执行阶段。

复位阶段进行系统自检和硬件初始化,时钟初始化阶段配置系统时钟,中断向量表重定位阶段将中断向量表重定
位到实际的起始地址,主函数执行阶段初始化外设并进入循环等待外设事
件的发生。

这个过程是STM32系统启动的基本过程,对于系统的正常运行
起着关键作用。

STM32启动文件:startup_stm32f10x_hd.s等启动文件的简单描述

STM32启动文件:startup_stm32f10x_hd.s等启动文件的简单描述

STM32启动⽂件:startup_stm32f10x_hd.s等启动⽂件的简单描述在官⽅的库⽂件中,分别有如下⽂件:startup│││├─arm││││ startup_stm32f10x_cl.s││││ startup_stm32f10x_hd.s││││ startup_stm32f10x_hd_vl.s││││ startup_stm32f10x_ld.s││││ startup_stm32f10x_ld_vl.s││││ startup_stm32f10x_md.s││││ startup_stm32f10x_md_vl.s││││ startup_stm32f10x_xl.sR8T6使⽤的MD.s,中容量的arm芯⽚,⼤致的启动内容如下:初始化堆栈指针 SP初始化程序计数器指针 PC设置堆、栈的⼤⼩设置中断向量表的⼊⼝地址配置外部 SRAM 作为数据存储器调⽤ SystemInit() 函数配置 STM32 的系统时钟设置 C 库的分⽀⼊⼝ "__main” (最终⽤来调⽤ main 函数)startup_stm32f10x_hd.s 是⼀个启动⽂件,⾥⾯是使⽤汇编语⾔写好的基本程序,当STM32 芯⽚上电启动的时候,受限会执⾏这⾥的汇编程序,从⽽建⽴起来C 语⾔的运⾏环境,所以我们把这个⽂件称为启动⽂件。

改⽂件使⽤的汇编指令是 Cortex-M3 内核⽀持的指令,可以参考《Cortex-M3 权威指南中⽂》内指令集章节。

startup_stm32f10x_hd.s ⽂件是由ST官⽅提供的,该⽂件可以从KEIL5 安装⽬录中找到,也可以从STV3.5库⾥⾯找到,找到该⽂件后吧启动⽂件添加到⼯程⾥⾯即可。

不同型号的芯⽚以及不同编译环境使⽤的汇编⽂件是不⼀样的,但功能相同。

在keilMDK4中只有STM32F10x.s⽂件。

在<<STM32不完全⼿册⾥⾯>>,所有的例程都采⽤了⼀个叫STM32F10x.s的启动⽂件,⾥⾯定义了STM32的堆栈⼤⼩以及各种中断的名字及⼊⼝函数名称,还有启动相关的汇编代码。

stm32启动文件详解及SystemInit函数分析

stm32启动文件详解及SystemInit函数分析
DCD PendSV_Handler ; PendSV Handler
DCD SysTick_Handler ; SysTick Handler
; External Interrupts
DCD WWDG_IRQHandler ; Window Watchdog
DCD PVD_IRQHandler ; PVD through EXTI Line detect
DCD TAMPER_IRQHandler ; Tamper
DCD RTC_IRQHandler ; RTC
DCD FLASH_IRQHandler ; Flash
;__main函数由编译器生成,负责初始化栈、堆等,并在最后跳转到用户自定义的main()函数,来到C的世界。
Stack_Size EQU 0x00000400 ;//定义堆栈大小
AREA STACK, NOINIT, READWRITE, ALIGN=3 ;//定义一个数据段 按8字节对齐 ;AREA 伪指令用于定义一个代码段或数据段 NOINIT:指定此数据段仅仅保留了内存单元,而没有将各初始值写入内存单元,或者将各个内存单元值初始化为0
;链接器检查要求堆栈八字节对齐的任何代码是否仅由保持堆栈八字节对齐的代码直接或间接地调用。
PRESERVE8 ;//指示编译器8字节对齐
Байду номын сангаас THUMB ;//指示编译器以后的指令为THUMB指令
;中断向量表定义
; Vector Table Mapped to Address 0 at Reset
;中断函数仅仅实现了Reset_Handler,其他要么是死循环,要么仅仅定义了函数名称
;STM32被设置为从内部FLASH启动时(这也是最常见的一种情况),当STM32遇到复位信号后,

解析STM32的启动过程

解析STM32的启动过程

解析STM32的启动过程STM32的启动过程可以分为硬件启动过程和软件启动过程两部分。

硬件启动过程主要是指芯片上电后的初始化阶段,而软件启动过程则是指固定在芯片内的启动程序的执行过程。

硬件启动过程1.上电复位:当STM32芯片上电后,会进行一次复位操作,将片内的所有寄存器初始化为默认值。

2.时钟初始化:芯片复位后,需要初始化芯片的各个时钟源和时钟分频系数。

例如,配置系统时钟、外设时钟和外设时钟的分频。

3.外设初始化:初始化芯片的各个外设,包括GPIO、USART、SPI、I2C等。

外设初始化主要是配置相应的寄存器使它们能够正常工作。

4.中断向量表:中断向量表是储存在芯片中的一系列函数指针,用于响应中断事件。

在硬件启动过程中,需要将中断向量表的地址设定为固定的位置,并将其中各个中断的函数指针初始化为默认的中断服务函数。

5.系统堆栈初始化:系统堆栈是用于存储函数调用时的临时变量和程序返回地址的存储区域。

在硬件启动过程中,需要初始化系统堆栈指针,为后续的函数调用和中断处理做准备。

6. 程序复位:在芯片复位后,可以选择从外部存储器(如Flash)中加载启动程序,或从内部存储器(如内置Bootloader)中加载启动程序。

启动程序一般是一个二进制文件,其中包含了一系列的初始化指令和应用程序的入口点。

软件启动过程1.初始化函数:启动程序首先执行初始化函数,用于初始化C库、变量和硬件资源等。

例如,初始化堆栈指针、启动C库和启用FPU等。

2.系统时钟初始化:启动程序需要初始化系统时钟,以使系统能够正常工作。

这包括设置主时钟源、配置主时钟分频系数和外设时钟分频系数等。

3.初始化其他硬件资源:启动程序会初始化其他的硬件资源,例如外设、存储器、中断控制器等。

4.跳转到主函数入口点:启动程序最后一步是跳转到主函数的入口点,开始执行用户代码。

总结STM32的启动过程可以分为硬件启动过程和软件启动过程。

硬件启动过程包括上电复位、时钟初始化、外设初始化、中断向量表配置和系统堆栈初始化等操作。

解析STM32的启动过程

解析STM32的启动过程

解析STM32的启动过程当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择。

如此一来main函数似乎成为了理所当然的起点——因为C程序往往从main函数开始执行。

但一个经常会被忽略的问题是:微控制器(单片机)上电后,是如何寻找到并执行main函数的呢?很显然微控制器无法从硬件上定位main函数的入口地址,因为使用C语言作为开发语言后,变量/函数的地址便由编译器在编译时自行分配,这样一来main函数的入口地址在微控制器的内部存储空间中不再是绝对不变的。

相信读者都可以回答这个问题,答案也许大同小异,但肯定都有个关键词,叫“启动文件”,用英文单词来描述是“Bootloader”。

无论性能高下,结构简繁,价格贵贱,每一种微控制器(处理器)都必须有启动文件,启动文件的作用便是负责执行微控制器从“复位”到“开始执行main函数”中间这段时间(称为启动过程)所必须进行的工作。

最为常见的51,AVR或MSP430等微控制器当然也有对应启动文件,但开发环境往往自动完整地提供了这个启动文件,不需要开发人员再行干预启动过程,只需要从main函数开始进行应用程序的设计即可。

话题转到STM32微控制器,无论是keiluvision4还是IAR EWARM开发环境,ST公司都提供了现成的直接可用的启动文件,程序开发人员可以直接引用启动文件后直接进行C应用程序的开发。

这样能大大减小开发人员从其它微控制器平台跳转至STM32平台,也降低了适应STM32微控制器的难度(对于上一代ARM 的当家花旦ARM9,启动文件往往是第一道难啃却又无法逾越的坎)。

相对于ARM上一代的主流ARM7/ARM9内核架构,新一代Cortex内核架构的启动方式有了比较大的变化。

ARM7/ARM9内核的控制器在复位后,CPU会从存储空间的绝对地址0x000000取出第一条指令执行复位中断服务程序的方式启动,即固定了复位后的起始地址为0x000000(PC = 0x000000)同时中断向量表的位置并不是固定的。

stm32启动文件和汇编指令简析

stm32启动文件和汇编指令简析

stm32启动⽂件和汇编指令简析
以stm32fxxxx为例
⼀、启动⽂件,startup_stm32f40_41xxx.S
1.定义:启动⽂件由汇编填写,是系统上电复位后第⼀个执⾏的程序。

2.特征
(1)初始化堆栈指针SP=_initial_sp
(2)初始化PC指针=Reset_Handler
(3)初始化中断向量表。

(4)配置系统时钟。

(5)调⽤c库函数_main初始化⽤户堆栈,从⽽最终调⽤main函数去到c的内容。

⼆、汇编指令
启动⽂件使⽤ARM汇编指令汇总
EQU 给数字常量取⼀个符号名,相当于c语⾔define。

AREA 汇编⼀个新的代码段或数据段。

SPACE 分配内存空间。

PRESERVE8 当前⽂件堆栈需按照8字节对齐。

EXPORT 声明⼀个标号具有全局性,可被外部⽂件使⽤。

DCD 以字为单位分配内存,要求4字节对齐,并要求初始化这些内存。

PROC 定义⼦程序,与ENDP成对使⽤,表⽰⼦程序结束。

WEAK 弱定义,如果外部⽂件声明⼀个标号,则优先使⽤外部⽂件定义的标号,如果外部⽂件没有定义也不会出错。

要注意这个不是ARM 指令,是编译器的。

IMPORT 声明标号来⾃外部⽂件,跟c语⾔EXTERN关键字类似。

B 跳转到⼀个标志号。

STM32之启动文件详解

STM32之启动文件详解

STM32 之启动文件详解在嵌入式应用程序开发过程里,由于使用C 语言编程,基本很少涉及到机器底层寄存器的执行过程,一般都会直接在main 函数里开始写代码,似乎main 成为了理所当然的起点,尽管从C 程序的角度来看程序都是直接从main 函数开始执行。

然而,MCU 上电后,是如何寻找到并执行main 函数这一问题却很自然的被忽略了!事实上微控制器是无法从硬件上去定位main 函数的入口地址,因为使用C 语言作为开发语言后,变量/函数的地址便由编译器在编译时自行分配,因此main 函数的入口地址在编译后便不一定是一个绝对地址。

MCU 上电后又是如何寻找到这个入口地址呢?以前接触无论是PIC、AVR、MSP430 或是51 过程中都没涉及到启动文件的配置,仅仅只有熔丝位或配置字是需要根据实际使用配置来设置,其实并非没有,而是由于大部分的开发环境往往自动完整地提供了这个启动文件,不需要开发人员再行干预启动过程,只需要从main 函数开始进行应用程序的设计即可。

然而,但接触到嵌入内核比如Linux 系统移植过程bootloader 却是很重要也是必不可少的一个环节。

事实上,每一种微控制器,无论性能高下,结构简繁,价格贵贱都是必须有启动文件才能正常工作的,它的作用同bootloader 类似。

启动文件完成了微控制器从复位到开始执行main 函数中间这段时间的必要启动配置。

在STM32 中,如果是在MDK 下创建一个工程,一般都有提示是否加入Star up Code 文件,这个就是启动文件,这里有个误区,一般对于初学者来看,很容易误以为STM32F10x.s 这个启动文件是STM32 所有类型芯片的通用启动文件,因此也自然不会去理会它的作用,事实上,这个启动文件只是。

STM32启动文件的选择及宏定义及芯片型号更改IAP总结

STM32启动文件的选择及宏定义及芯片型号更改IAP总结

STM32启动文件的选择及宏定义及芯片型号更改IAP总结对于STM32芯片,启动文件主要包括以下几个部分:1.启动向量表:包含中断服务程序的地址信息,用于系统初始化和中断处理等功能。

2.中断服务程序:对中断进行处理的代码,包括系统初始化时的复位中断和其他外部中断。

3.系统初始化代码:完成芯片的初始化工作,包括时钟配置、外设初始化、堆栈初始化等。

在选择启动文件时,需要注意以下几点:1.芯片型号匹配:确保所选择的启动文件与使用的芯片型号兼容,以确保正常的系统初始化和中断处理。

2. 如需使用外部存储器:如果需要使用外部存储器,如外部Flash 或RAM,需要选择支持外部存储器的启动文件。

3. 如需使用操作系统:如果需要在系统中运行操作系统,如FreeRTOS或uc/OS等,需要选择对应操作系统的启动文件。

在启动文件中,还涉及宏定义的使用。

宏定义是一种预处理指令,用于在编译时替换特定的文本字符串。

在启动文件中,通常会使用宏定义来配置系统的时钟频率、中断向量表的起始地址等参数。

在更改芯片型号时1.切换器件描述文件:在工程文件中,需要将所使用的芯片型号对应的器件描述文件进行切换。

这个文件通常在项目设置中进行配置。

2.修改启动文件:将原有的启动文件替换为新的芯片型号所对应的启动文件。

3.更新宏定义:在新的启动文件中,需要确认并更新宏定义,以确保系统的配置和参数正确。

4.复查外设配置:在启动文件中,有可能包含对外设的初始化代码。

在更改芯片型号后,需要复查外设的配置和初始化。

总结起来,选择合适的STM32启动文件,需要根据所使用的芯片型号来进行选择,并注意更改宏定义和复查外设配置。

这样才能确保系统正常初始化和中断处理的功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM32启动代码概述一般嵌入式开发流程就是先建立一个工程,再编写源文件,然后进行编译,把所有的*.s文件和*.c文件编译成一个*.o文件,再对目标文件进行链接和定位,编译成功后会生成一个*.hex文件和调试文件,接下来要进行调试,如果成功的话,就可以将它固化到flash里面去。

启动代码是用来初始化电路以及用来为高级语言写的软件作好运行前准备的一小段汇编语言,是任何处理器上电复位时的程序运行入口点。

比如,刚上电的过程中,PC机会对系统的一个运行频率进行锁定在一个固定的值,这个设计频率的过程就是在汇编源代码中进行的,也就是在启动代码中进行的。

与此同时,设置完后,程序开始运行,注意,程序是在内存中运行的。

这个时候,就需要把一些源文件从flash里面copy到内存中,又要对它们进行初始化读写,这又有频率的设置。

这些都是初始化。

初始化完成后,我们又要设置一些堆栈,要跳到C语言的main函数里面运行。

这就需要堆栈。

对普通的ARM CPU有这样一个要求:在绝对地址为零的地方要放置一个异常向量表,但并不是所有的ARM CPU都留有这个一个空间,这就需要用到映射的功能。

我们可以将其它地方的一些空间映射到绝对地址里面。

当发生异常时,ARM核来读取异常中断表的时候,它会使用映射之后的那个表,这个就可以接着往下执行,否则在绝对地址零的地方找不到任何信息,程序就会死掉。

这些运行的环境全部建立好后,程序就会跳转到我们的main函数里面。

总之,启动代码,就是对最小系统的初始化。

包括晶振,CPU频率等。

启动代码的最小系统是:异常向量表的初始化–存储区分配–初始化堆栈–高级语言入口函数调用– main()函数。

程序的启动过程:以下面这个例子为例,编译完后,DEBUG后,我们可以看到,光标指向绝对地址为零的地方,这里存放的就是一个异常向量表。

它对应在startup.s里的源文件如下:单步运行后,马上跳转到初始化CPU的频率。

即初始化锁相环,将其锁在一个固定的频率。

具体代码如下:; Setup PLLIFPLL_SETUP <> 0LDRR0, =PLL_BASEMOVR1, #0xAAMOVR2, #0x55;Configure and Enable PLLMOVR3, #PLLCFG_ValSTRR3, [R0, #PLLCFG_OFS]MOVR3, #PLLCON_PLLESTRR3, [R0, #PLLCON_OFS]STRR1, [R0, #PLLFEED_OFS]STRR2, [R0, #PLLFEED_OFS];Wait until PLL LockedPLL_LoopLDRR3, [R0, #PLLSTAT_OFS]ANDSR3, R3, #PLLSTAT_PLOCKBEQPLL_Loop;Switch to PLL ClockMOVR3, #(PLLCON_PLLE:OR LLCON_PLLC)STRR3, [R0, #PLLCON_OFS]STRR1, [R0, #PLLFEED_OFS]STRR2, [R0, #PLLFEED_OFS]ENDIF; PLL_SETUP然后再初始化每一种模式的堆栈,再进行单步运行的时候,下面我们可以看到,它自动跳转到main()函数:; Enter the C codeIMPORT__mainLDRR0, =__mainBXR0IFEF:__MICROLIBEXPORT__heap_baseEXPORT__heap_limitELSE这个时候,程序会运行各种scatterload函数,将我们的堆栈、全局变量等内容拷贝到内存中去。

拷贝完后,就正式跳转到我们的main()函数中来执行了。

这就是启动代码执行的全过程,呵呵,平时我们看到以为只是执行main()函数就行了,是不是没有想到在执行 main() 函数后还有这么多学问呢?STM32 启动文件解析!时间:2010-05-02 10:41来源:作者:点击:79次STM32 启动文件解析!- 技术文档- 安装启动安装启动Linux 技术文档;/*****************************************************************************/ ;/* STM32F10x.s: Startup file for ST STM32F10x device series */;/*****************************************************************************/ ;/* >> */;/*****************************************************************************/ ;/* This file is part of the uVision/ARM development tools. */;/* Copyright (c) 2005-2007 Keil Software. All rights reserved. */;/* This software may only be used under the terms of a valid, current, */;/* end user licence from KEIL for a compatible version of KEIL software */;/* development tools. Nothing else gives you the right to use this software. */;/*****************************************************************************/ ;// Stack Configuration;// Stack Size (in Bytes);//Stack_Size EQU 0x00000200;AREA 伪指令用于定义一个代码段或数据段AREA STACK, NOINIT, READWRITE, ALIGN=3 ;NOINIT:指定此数据段仅仅保留了内存单元,而没有将各初始值写入内存单元,或者将各个内存单元值初始化为0Stack_Mem SPACE Stack_Size ;分配连续Stack_Size 字节的存储单元并初始化为0__initial_sp;// Heap Configuration;// Heap Size (in Bytes);//Heap_Size EQU 0x00000000AREA HEAP, NOINIT, READWRITE, ALIGN=3__heap_baseHeap_Mem SPACE Heap_Size__heap_limit;PRESERVE8 指令指定当前文件保持堆栈八字节对齐。

它设置PRES8 编译属性以通知链接器。

;链接器检查要求堆栈八字节对齐的任何代码是否仅由保持堆栈八字节对齐的代码直接或间接地调用。

PRESERVE8THUMB ;之后的都是THUMB指令; Vector Table Mapped to Address 0 at ResetAREA RESET, DATA, READONLYEXPORT __Vectors ;EXPORT:在程序中声明一个全局的标号__Vectors,该标号可在其他的文件中引用;IMPORT:伪指令用于通知编译器要使用的标号在其他的源文件中定义,;但要在当前源文件中引用,而且无论当前源文件是否引用该标号,该标号均会被加入到当前源文件的符号表中__Vectors DCD __initial_sp ; Top of StackDCD Reset_Handler ; Reset HandlerDCD NMI_Handler ; NMI Handler(责任编辑:admin)STM32 启动文件解析!(2)时间:2010-05-02 10:41来源:作者:点击:80次DCD HardFault_Handler ; Hard Fault Handler DCD MemManage_Handler ; MPU Fault Handler DCD BusFault_Handler ; Bus Fault Handler DCD UsageFault_Handler ; Usage Fault Handler DCD 0 ; Reserved DCD 0 ; ReseDCD HardFault_Handler ; Hard Fault HandlerDCD MemManage_Handler ; MPU Fault HandlerDCD BusFault_Handler ; Bus Fault HandlerDCD UsageFault_Handler ; Usage Fault HandlerDCD 0 ; ReservedDCD 0 ; ReservedDCD 0 ; ReservedDCD 0 ; ReservedDCD SVC_Handler ; SVCall HandlerDCD DebugMon_Handler ; Debug Monitor HandlerDCD 0 ; ReservedDCD PendSV_Handler ; PendSV HandlerDCD SysTick_Handler ; SysTick Handler; External InterruptsDCD WWDG_IRQHandler ; Window WatchdogDCD PVD_IRQHandler ; PVD through EXTI Line detectDCD TAMPER_IRQHandler ; TamperDCD RTC_IRQHandler ; RTCDCD FLASH_IRQHandler ; FlashDCD RCC_IRQHandler ; RCCDCD EXTI0_IRQHandler ; EXTI Line 0DCD EXTI1_IRQHandler ; EXTI Line 1DCD EXTI2_IRQHandler ; EXTI Line 2DCD EXTI3_IRQHandler ; EXTI Line 3DCD EXTI4_IRQHandler ; EXTI Line 4DCD DMAChannel1_IRQHandler ; DMA Channel 1DCD DMAChannel2_IRQHandler ; DMA Channel 2DCD DMAChannel3_IRQHandler ; DMA Channel 3DCD DMAChannel4_IRQHandler ; DMA Channel 4(责任编辑:admin)STM32 启动文件解析!(3)时间:2010-05-02 10:41来源:作者:点击:80次DCD DMAChannel5_IRQHandler ; DMA Channel 5 DCD DMAChannel6_IRQHandler ; DMA Channel 6 DCD DMAChannel7_IRQHandler ; DMA Channel 7 DCD ADC_IRQHandler ; ADC DCD USB_HP_CAN_TX_IRQHandler; USB High PrioritDCD DMAChannel5_IRQHandler ; DMA Channel 5DCD DMAChannel6_IRQHandler ; DMA Channel 6DCD DMAChannel7_IRQHandler ; DMA Channel 7DCD ADC_IRQHandler ; ADCDCD USB_HP_CAN_TX_IRQHandler ; USB High Priority or CAN TXDCD USB_LP_CAN_RX0_IRQHandler ; USB Low Priority or CAN RX0DCD CAN_RX1_IRQHandler ; CAN RX1DCD CAN_SCE_IRQHandler ; CAN SCEDCD EXTI9_5_IRQHandler ; EXTI Line 9..5DCD TIM1_BRK_IRQHandler ; TIM1 BreakDCD TIM1_UP_IRQHandler ; TIM1 UpdateDCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and CommutationDCD TIM1_CC_IRQHandler ; TIM1 Capture CompareDCD TIM2_IRQHandler ; TIM2DCD TIM3_IRQHandler ; TIM3DCD TIM4_IRQHandler ; TIM4DCD I2C1_EV_IRQHandler ; I2C1 EventDCD I2C1_ER_IRQHandler ; I2C1 ErrorDCD I2C2_EV_IRQHandler ; I2C2 EventDCD I2C2_ER_IRQHandler ; I2C2 ErrorDCD SPI1_IRQHandler ; SPI1DCD SPI2_IRQHandler ; SPI2DCD USART1_IRQHandler ; USART1DCD USART2_IRQHandler ; USART2DCD USART3_IRQHandler ; USART3DCD EXTI15_10_IRQHandler ; EXTI Line 15..10DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI LineDCD USBWakeUp_IRQHandler ; USB Wakeup from suspendAREA |.text|, CODE, READONLY; Reset Handler;利用PROC、ENDP这一对伪指令把程序段分为若干个过程,使程序的结构加清晰(责任编辑:admin)STM32 启动文件解析!(4)时间:2010-05-02 10:41来源:作者:点击:80次Reset_Handler PROC ;过程的开始EXPORTReset_Handler [WEAK] IMPORT__main LDR R0, =__main BX R0 ENDP ;过程的结束; Dummy Exception Handlers (infinite loops which can be modified) NMI_Handler PRReset_Handler PROC ;过程的开始EXPORT Reset_Handler [WEAK]IMPORT __mainLDR R0, =__mainBX R0ENDP ;过程的结束; Dummy Exception Handlers (infinite loops which can be modified)NMI_Handler PROCEXPORT NMI_Handler [WEAK]B .ENDPHardFault_HandlerPROCEXPORT HardFault_Handler [WEAK]B .ENDPMemManage_HandlerPROCEXPORT MemManage_Handler [WEAK]B .ENDPBusFault_HandlerPROCEXPORT BusFault_Handler [WEAK]B .ENDPUsageFault_HandlerPROCEXPORT UsageFault_Handler [WEAK]B .ENDPSVC_Handler PROCEXPORT SVC_Handler [WEAK]B .ENDPDebugMon_HandlerPROCEXPORT DebugMon_Handler [WEAK]B .ENDPPendSV_Handler PROCEXPORT PendSV_Handler [WEAK]B .ENDPSysTick_Handler PROCEXPORT SysTick_Handler [WEAK]B .ENDPDefault_Handler PROCEXPORT WWDG_IRQHandler [WEAK]EXPORT PVD_IRQHandler [WEAK]EXPORT TAMPER_IRQHandler [WEAK](责任编辑:admin)STM32 启动文件解析!(5)时间:2010-05-02 10:41来源:作者:点击:80次EXPORTRTC_IRQHandler [WEAK] EXPORTFLASH_IRQHandler [WEAK] EXPORTRCC_IRQHandler [WEAK] EXPORTEXTI0_IRQHandler [WEAK] EXPORTEXTI1_IRQHandler [WEAK] EXPORTEXTI2_IRQHandler [WEAK] EXPORTEXTI3_IRQHandler [EXPORT RTC_IRQHandler [WEAK]EXPORT FLASH_IRQHandler [WEAK]EXPORT EXTI0_IRQHandler [WEAK]EXPORT EXTI1_IRQHandler [WEAK]EXPORT EXTI2_IRQHandler [WEAK]EXPORT EXTI3_IRQHandler [WEAK]EXPORT EXTI4_IRQHandler [WEAK]EXPORT DMAChannel1_IRQHandler [WEAK]EXPORT DMAChannel2_IRQHandler [WEAK]EXPORT DMAChannel3_IRQHandler [WEAK]EXPORT DMAChannel4_IRQHandler [WEAK]EXPORT DMAChannel5_IRQHandler [WEAK]EXPORT DMAChannel6_IRQHandler [WEAK]EXPORT DMAChannel7_IRQHandler [WEAK]EXPORT ADC_IRQHandler [WEAK]EXPORT USB_HP_CAN_TX_IRQHandler [WEAK]EXPORT USB_LP_CAN_RX0_IRQHandler [WEAK]EXPORT CAN_RX1_IRQHandler [WEAK]EXPORT CAN_SCE_IRQHandler [WEAK]EXPORT EXTI9_5_IRQHandler [WEAK]EXPORT TIM1_BRK_IRQHandler [WEAK]EXPORT TIM1_UP_IRQHandler [WEAK]EXPORT TIM1_TRG_COM_IRQHandler [WEAK]EXPORT TIM1_CC_IRQHandler [WEAK]EXPORT TIM2_IRQHandler [WEAK]EXPORT TIM3_IRQHandler [WEAK]EXPORT TIM4_IRQHandler [WEAK]EXPORT I2C1_EV_IRQHandler [WEAK]EXPORT I2C1_ER_IRQHandler [WEAK]EXPORT I2C2_EV_IRQHandler [WEAK]EXPORT I2C2_ER_IRQHandler [WEAK]EXPORT SPI1_IRQHandler [WEAK]EXPORT SPI2_IRQHandler [WEAK]EXPORT USART1_IRQHandler [WEAK](责任编辑:admin)STM32 启动文件解析!(6)时间:2010-05-02 10:41来源:作者:点击:80次EXPORTUSART2_IRQHandler [WEAK] EXPORTUSART3_IRQHandler [WEAK] EXPORTEXTI15_10_IRQHandler [WEAK] EXPORTRTCAlarm_IRQHandler [WEAK] EXPORTUSBWakeUp_IRQHandler [WEAK] WWDG_IRQHandler PVD_IRQHandler TAMPEREXPORT USART2_IRQHandler [WEAK]EXPORT USART3_IRQHandler [WEAK]EXPORT RTCAlarm_IRQHandler [WEAK]EXPORT USBWakeUp_IRQHandler [WEAK] WWDG_IRQHandlerPVD_IRQHandlerTAMPER_IRQHandlerRTC_IRQHandlerFLASH_IRQHandlerRCC_IRQHandlerEXTI0_IRQHandlerEXTI1_IRQHandlerEXTI2_IRQHandlerEXTI3_IRQHandlerEXTI4_IRQHandlerDMAChannel1_IRQHandlerDMAChannel2_IRQHandlerDMAChannel3_IRQHandlerDMAChannel4_IRQHandlerDMAChannel5_IRQHandlerDMAChannel6_IRQHandlerDMAChannel7_IRQHandlerADC_IRQHandlerUSB_HP_CAN_TX_IRQHandlerUSB_LP_CAN_RX0_IRQHandlerCAN_RX1_IRQHandlerCAN_SCE_IRQHandlerEXTI9_5_IRQHandlerTIM1_BRK_IRQHandlerTIM1_UP_IRQHandlerTIM1_TRG_COM_IRQHandlerTIM1_CC_IRQHandlerTIM2_IRQHandlerTIM3_IRQHandlerTIM4_IRQHandlerI2C1_EV_IRQHandlerI2C1_ER_IRQHandlerI2C2_EV_IRQHandlerI2C2_ER_IRQHandlerSPI1_IRQHandlerSPI2_IRQHandlerUSART1_IRQHandlerUSART2_IRQHandlerUSART3_IRQHandlerEXTI15_10_IRQHandlerRTCAlarm_IRQHandlerUSBWakeUp_IRQHandlerB .ENDPALIGN; User Initial Stack & HeapIF :DEF:__MICROLIBEXPORT __initial_spEXPORT __heap_baseEXPORT __heap_limitELSEIMPORT __use_two_region_memoryEXPORT __user_initial_stackheap__user_initial_stackheapLDR R0, = Heap_MemLDR R1, =(Stack_Mem + Stack_Size)LDR R2, = (Heap_Mem + Heap_Size)LDR R3, = Stack_MemBX LRALIGNENDIFEND(责任编辑:admin)。

相关文档
最新文档