STM32启动概述.doc_第1页
STM32启动概述.doc_第2页
STM32启动概述.doc_第3页
STM32启动概述.doc_第4页
STM32启动概述.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

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_OFSMOVR3, #PLLCON_PLLESTRR3, R0, #PLLCON_OFSSTRR1, R0, #PLLFEED_OFSSTRR2, R0, #PLLFEED_OFS;Wait until PLL LockedPLL_LoopLDRR3, R0, #PLLSTAT_OFSANDSR3, R3, #PLLSTAT_PLOCKBEQPLL_Loop;Switch to PLL ClockMOVR3, #(PLLCON_PLLE:ORLLCON_PLLC)STRR3, R0, #PLLCON_OFSSTRR1, R0, #PLLFEED_OFSSTRR2, R0, #PLLFEED_OFSENDIF; 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 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3_heap_baseHeap_Mem SPACE Heap_Size_heap_limit ;PRESERVE8 指令指定当前文件保持堆栈八字节对齐。 它设置 PRES8 编译属性以通知链接器。 ;链接器检查要求堆栈八字节对齐的任何代码是否仅由保持堆栈八字节对齐的代码直接或间接地调用。 PRESERVE8 THUMB ;之后的都是THUMB指令; Vector Table Mapped to Address 0 at Reset AREA RESET, DATA, READONLY EXPORT_Vectors ;EXPORT:在程序中声明一个全局的标号_Vectors,该标号可在其他的文件中引用;IMPORT:伪指令用于通知编译器要使用的标号在其他的源文件中定义, ;但要在当前源文件中引用,而且无论当前源文件是否引用该标号,该标号均会被加入到当前源文件的符号表中_Vectors DCD _initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD 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 ; Rese 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 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD SVC_Handler ; SVCall Handler DCD DebugMon_Handler ; Debug Monitor Handler DCD 0 ; Reserved 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 DCD RCC_IRQHandler ; RCC DCD EXTI0_IRQHandler ; EXTI Line 0 DCD EXTI1_IRQHandler ; EXTI Line 1 DCD EXTI2_IRQHandler ; EXTI Line 2 DCD EXTI3_IRQHandler ; EXTI Line 3 DCD EXTI4_IRQHandler ; EXTI Line 4 DCD DMAChannel1_IRQHandler ; DMA Channel 1 DCD DMAChannel2_IRQHandler ; DMA Channel 2 DCD DMAChannel3_IRQHandler ; DMA Channel 3 DCD 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 Priorit 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 Priority or CAN TX DCD USB_LP_CAN_RX0_IRQHandler ; USB LowPriority or CAN RX0 DCD CAN_RX1_IRQHandler ; CAN RX1 DCD CAN_SCE_IRQHandler ; CAN SCE DCD EXTI9_5_IRQHandler ; EXTI Line 9.5 DCD TIM1_BRK_IRQHandler ; TIM1 Break DCD TIM1_UP_IRQHandler ; TIM1 Update DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare DCD TIM2_IRQHandler ; TIM2 DCD TIM3_IRQHandler ; TIM3 DCD TIM4_IRQHandler ; TIM4 DCD I2C1_EV_IRQHandler ; I2C1 Event DCD I2C1_ER_IRQHandler ; I2C1 Error DCD I2C2_EV_IRQHandler ; I2C2 Event DCD I2C2_ER_IRQHandler ; I2C2 Error DCD SPI1_IRQHandler ; SPI1 DCD SPI2_IRQHandler ; SPI2 DCD USART1_IRQHandler ; USART1 DCD USART2_IRQHandler ; USART2 DCD USART3_IRQHandler ; USART3 DCD EXTI15_10_IRQHandler ; EXTI Line 15.10 DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend AREA |.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 ;过程的开始 EXPORTReset_Handler WEAK IMPORT_main LDR R0, =_main BX R0 ENDP ;过程的结束; Dummy Exception Handlers (infinite loops which can be modified) NMI_Handler PROC EXPORTNMI_Handler WEAK B . ENDPHardFault_Handler PROC EXPORTHardFault_Handler WEAK B . ENDPMemManage_Handler PROC EXPORTMemManage_Handler WEAK B . ENDPBusFault_Handler PROC EXPORTBusFault_Handler WEAK B . ENDPUsageFault_Handler PROC EXPORTUsageFault_Handler WEAK B . ENDPSVC_Handler PROC EXPORTSVC_Handler WEAK B . ENDPDebugMon_Handler PROC EXPORTDebugMon_Handler WEAK B . ENDPPendSV_HandlerPROC EXPORTPendSV_Handler WEAK B . ENDPSysTick_Handler PROC EXPORTSysTick_Handler WEAK B . ENDPDefault_Handler PROC EXPORTWWDG_IRQHandler WEAK EXPORTPVD_IRQHandler WEAK EXPORTTAMPER_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 EXPORTRTC_IRQHandler WEAK EXPORTFLASH_IRQHandler WEAK EXPORTRCC_IRQHandler WEAK EXPORTEXTI0_IRQHandler WEAK EXPORTEXTI1_IRQHandler WEAK EXPORTEXTI2_IRQHandler WEAK EXPORTEXTI3_IRQHandler WEAK EXPORTEXTI4_IRQHandler WEAK EXPORTDMAChannel1_IRQHandler WEAK EXPORTDMAChannel2_IRQHandler WEAK EXPORTDMAChannel3_IRQHandler WEAK EXPORTDMAChannel4_IRQHandler WEAK EXPORTDMAChannel5_IRQHandler WEAK EXPORTDMAChannel6_IRQHandler WEAK EXPORTDMAChannel7_IRQHandler WEAK EXPORTADC_IRQHandler WEAK EXPORTUSB_HP_CAN_TX_IRQHandlerWEAK EXPORTUSB_LP_CAN_RX0_IRQHandler WEAK EXPORTCAN_RX1_IRQHandler WEAK EXPORTCAN_SCE_IRQHandler WEAK EXPORTEXTI9_5_IRQHandler WEAK EXPORTTIM1_BRK_IRQHandler WEAK EXPORTTIM1_UP_IRQHandler WEAK EXPORTTIM1_TRG_COM_IRQHandler WEAK EXPORTTIM1_CC_IRQHandler WEAK EXPORTTIM2_IRQHandler WEAK EXPORTTIM3_IRQHandler WEAK EXPORTTIM4_IRQHandler WEAK EXPORTI2C1_EV_IRQHandler WEAK EXPORTI2C1_ER_IRQHandler WEAK EXPORTI2C2_EV_IRQHandler WEAK EXPORTI2C2_ER_IRQHandler WEAK EXPORTSPI1_IRQHandler WEAK EXPORTSPI2_IRQHandler WEAK EXPORTUSART1_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 TAMPER EXPORTUSART2_IRQHandler WEAK EXPORTUSART3_IRQHandler WEAK EXPORTEXTI15_10_IRQHandler WEAK EXPORTRTCAlarm_IRQHandler WEAK EXPORTUSBWakeUp_IRQHandler WEAKWWDG_IRQHandlerPVD_IRQHandlerTAMPER_IRQHandlerRTC_IRQHandlerFLASH_IRQHandlerRCC_IRQHandlerEXTI0_IRQHandlerEXTI1_IRQHandlerEXTI2_IRQHandlerEXTI3_IRQHandlerEXTI4_IRQHandle

温馨提示

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

评论

0/150

提交评论