STM32学习笔记2------启动文件的认识

       STM32F429微控制器采用一种特殊的启动机制,通过设置BOOT1和BOOT0的引脚电平,可以从不同的存储器(主FLASH、系统存储器、嵌入式SRAM)启动。详见STM32F4xx中文参考手册2.4章自举配置。


       如上图所示,对所有单片机来说 ,当它获取到复位REESET信号后,首先它会做两个事情:取出栈指针SP的初始值和取出程序指针PC的初始值。对于stm32来说,作为32位的处理器,那么以16进制来表示地址的话,就应该是8位数字。所以,栈指针SP的初始值就是从地址0x00000000处取出,程序指针PC的初始值从地址0x00000004处取出。默认是从系统存储器启动。该处理解来自浅斟低唱的博客(他的解释很好理解,感谢)其链接为:https://www.jianshu.com/p/b120bf63c73f

系统上电复位后均从启动文件开始运行,其由汇编编写,涉及到ARM的汇编指令和Cortex的汇编指令,下面是启动文件(startup_stm32f429_439xx.s)的详细注解


;*******************************************************************************

;栈用于局部变量,函数调用,函数形参等的开销,大小不能超过内部SRAM的大小

Stack_Size      EQU     0x00000400   ;栈大小设置为1024字节
                ;AREA指示编译器编译出一个新的代码段或数据段,ALIGN=3,代表2的3次方字节对齐
                AREA    STACK, NOINIT, READWRITE, ALIGN=3   ;段名称为STACK,未初始化,可读可写,8字节对齐
Stack_Mem       SPACE   Stack_Size   ;分配空间,1024字节,首地址赋给Stack_Mem

__initial_sp                         ;紧挨space语句,表示栈结束地址,即栈顶,栈由高向低生长

; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
;堆用于动态内存的分配,像malloc()函数申请的内存就在堆上面

Heap_Size       EQU     0x00000200   ;堆大小设置为512字节
                AREA    HEAP, NOINIT, READWRITE, ALIGN=3   ;段名称为HEAP,未初始化,可读可写,8字节对齐
__heap_base                          ;堆起始地址
Heap_Mem        SPACE   Heap_Size    ;分配空间,512字节,首地址为Heap_Mem
__heap_limit                         ;堆结束地址

                PRESERVE8            ;当前文件的堆和栈保持8字节对齐
                THUMB                ;后面指令兼容THUMB指令,其为ARM以前的指令集

;EXPORT相当于GLOBAL,声明一个标号可被外部文件使用,使得该标号具有全局属性
; Vector Table Mapped to Address 0 at Reset
                AREA    RESET, DATA, READONLY   ;定义一个数据段RESET,可读
                EXPORT  __Vectors               ;全局属性标号,向量表开始
                EXPORT  __Vectors_End           ;全局属性标号,向量表结束
                EXPORT  __Vectors_Size          ;全局属性标号,向量表大小
;DCD用于分配存储单元,8字节对齐,并使用指定的数据进行初始化
__Vectors       DCD     __initial_sp               ; Top of Stack,复位后首先装载栈
                DCD     Reset_Handler              ; Reset Handler
                DCD     NMI_Handler                ; NMI Handler
                DCD     HardFault_Handler          ; Hard Fault Handler,硬件错误
                DCD     MemManage_Handler          ; MPU Fault Handler,MPU错误
                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,滴答时钟中断响应函数
;以上为STM32内部指定中断向量
                ; External Interrupts,下面为外部中断向量
                DCD     WWDG_IRQHandler                   ; Window WatchDog                                        
                DCD     PVD_IRQHandler                    ; PVD through EXTI Line detection                        
                DCD     TAMP_STAMP_IRQHandler             ; Tamper and TimeStamps through the EXTI line            
                DCD     RTC_WKUP_IRQHandler               ; RTC Wakeup through the EXTI line                       
                DCD     FLASH_IRQHandler                  ; FLASH                                           
                DCD     RCC_IRQHandler                    ; RCC                                             
                DCD     EXTI0_IRQHandler                  ; EXTI Line0                                             
                DCD     EXTI1_IRQHandler                  ; EXTI Line1                                             
                DCD     EXTI2_IRQHandler                  ; EXTI Line2                                             
                DCD     EXTI3_IRQHandler                  ; EXTI Line3                                             
                DCD     EXTI4_IRQHandler                  ; EXTI Line4                                             
                DCD     DMA1_Stream0_IRQHandler           ; DMA1 Stream 0                                   
                DCD     DMA1_Stream1_IRQHandler           ; DMA1 Stream 1                                   
                DCD     DMA1_Stream2_IRQHandler           ; DMA1 Stream 2                                   
                DCD     DMA1_Stream3_IRQHandler           ; DMA1 Stream 3                                   
                DCD     DMA1_Stream4_IRQHandler           ; DMA1 Stream 4                                   
                DCD     DMA1_Stream5_IRQHandler           ; DMA1 Stream 5                                   
                DCD     DMA1_Stream6_IRQHandler           ; DMA1 Stream 6                                   
                DCD     ADC_IRQHandler                    ; ADC1, ADC2 and ADC3s                            
                DCD     CAN1_TX_IRQHandler                ; CAN1 TX                                                
                DCD     CAN1_RX0_IRQHandler               ; CAN1 RX0                                               
                DCD     CAN1_RX1_IRQHandler               ; CAN1 RX1                                               
                DCD     CAN1_SCE_IRQHandler               ; CAN1 SCE                                               
                DCD     EXTI9_5_IRQHandler                ; External Line[9:5]s                                    
                DCD     TIM1_BRK_TIM9_IRQHandler          ; TIM1 Break and TIM9                   
                DCD     TIM1_UP_TIM10_IRQHandler          ; TIM1 Update and TIM10                 
                DCD     TIM1_T
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值