微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32启动文件详解及SystemInit函数分析

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

时间:11-27 来源:互联网 点击:
1 ;先在RAM中分配系统使用的栈,RAM的起始地址为0x2000_0000
2 ;然后在RAM中分配变量使用的堆
3 ;然后在CODE区(flash)分配中断向量表,flash的起始地址为0x0800_0000,该中断向量表就从这个起始地址开始分配
4 ;分配完成后,再定义和实现相应的中断函数,
5 ;所有的中断函数全部带有[weak]特性,即弱定义,如果编译器发现在别处文件中定义了同名函数,在链接时用别处的地址进行链接。
6 ;中断函数仅仅实现了Reset_Handler,其他要么是死循环,要么仅仅定义了函数名称
7
8 ;STM32被设置为从内部FLASH启动时(这也是最常见的一种情况),当STM32遇到复位信号后,
9 ;从0x0800_0000处取出栈顶地址存放于MSP寄存器,从0x0800_0004处取出复位中断服务入口地址放入PC寄存器,
10 ;继而执行复位中断服务程序Reset_Handler,
11 ;Reset_Handler仅仅执行了两个函数调用,一个是SystemInit,另一个__main,
12 ;SystemInit定义在system_stm32f10x.c中,主要初始化了STM的时钟系统:HSI,HSE,LSI,LSE,PLL,SYSCLK,USBCLK,APECLK等等.
13 ;__main函数由编译器生成,负责初始化栈、堆等,并在最后跳转到用户自定义的main()函数,来到C的世界。
14
15
16 Stack_SizeEQU0x00000400;//定义堆栈大小
17AREASTACK, NOINIT, READWRITE, ALIGN=3;//定义一个数据段 按8字节对齐;AREA 伪指令用于定义一个代码段或数据段 NOINIT:指定此数据段仅仅保留了内存单元,而没有将各初始值写入内存单元,或者将各个内存单元值初始化为0
18 Stack_MemSPACEStack_Size;//保留Stack_Size大小的堆栈空间 分 配连续 Stack_Size 字节的存储单元并初始化为 0
19 __initial_sp;//标号,代表堆栈顶部地址,后面有用
20
21 ; Heap Configuration
22 ;Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
23 ;
24 Heap_SizeEQU0x00000200;//定义堆空间大小
25AREAHEAP, NOINIT, READWRITE, ALIGN=3;//定义一个数据段,8字节对齐
26 __heap_base;//标号,代表堆末底部地址,后面有用
27 Heap_MemSPACEHeap_Size;//保留Heap_Size的堆空间
28 __heap_limit;//标号,代表堆界限地址,后面有用
29;PRESERVE8 指令指定当前文件保持堆栈八字节对齐。 它设置 PRES8 编译属性以通知链接器。
30;链接器检查要求堆栈八字节对齐的任何代码是否仅由保持堆栈八字节对齐的代码直接或间接地调用。
31PRESERVE8 ;//指示编译器8字节对齐
32THUMB;//指示编译器以后的指令为THUMB指令
33
34 ;中断向量表定义
35 ; Vector Table Mapped to Address 0 at Reset
36AREARESET, DATA, READONLY;//定义只读数据段,其实放在CODE区,位于0地址
37EXPORT__Vectors;EXPORT:在程序中声明一个全局的标号__Vectors,该标号可在其他的文件中引用
38EXPORT__Vectors_End
39EXPORT__Vectors_Size
40 __VectorsDCD__initial_sp; Top of Stack;给__initial_sp分配4字节32位的地址0x0
41DCDReset_Handler; Reset Handler ; 给标号Reset Handler分配地址为0x00000004
42DCDNMI_Handler; NMI Handler ; 给标号NMI Handler分配地址0x00000008
43DCDHardFault_Handler; Hard Fault Handler
44DCDMemManage_Handler; MPU Fault Handler
45DCDBusFault_Handler; Bus Fault Handler
46DCDUsageFault_Handler; Usage Fault Handler
47DCD0; Reserved; 这种形式就是保留地址,不给任何标号分配
48DCD0; Reserved
49DCD0; Reserved
50DCD0; Reserved
51DCDSVC_Handler; SVCall Handler
52DCDDebugMon_Handler; Debug Monitor Handler
53DCD0; Reserved
54DCDPendSV_Handler; PendSV Handler
55DCDSysTick_Handler; SysTick Handler
56; External Interrupts
57DCDWWDG_IRQHandler; Window Watchdog
58DCDPVD_IRQHandler; PVD through EXTI Line detect
59DCDTAMPER_IRQHandler; Tamper
60DCDRTC_IRQHandler; RTC
61DCDFLASH_IRQHandler; Flash
62DCDRCC_IRQHandler; RCC
63DCDEXTI0_IRQHandler; EXTI Line 0
64DCDEXTI1_IRQHandler; EXTI Line 1
65DCDEXTI2_IRQHandler; EXTI Line 2
66DCDEXTI3_IRQHandler; EXTI Line 3
67DCDEXTI4_IRQHandler; EXTI Line 4
68DCDDMA1_Channel1_IRQHandler; DMA1 Channel 1
69DCDDMA1_Channel2_IRQHandler; DMA1 Channel 2
70DCDDMA1_Channel3_IRQHandler; DMA1 Channel 3
71DCDDMA1_Channel4_IRQHandler; DMA1 Channel 4
72DCDDMA1_Channel5_IRQHandler; DMA1 Channel 5
73DCDDMA1_Channel6_IRQHandler; DMA1 Channel 6
74DCDDMA1_Channel7_IRQHandler; DMA1 Channel 7
75DCDADC1_2_IRQHandler; ADC1 & ADC2
76DCDUSB_HP_CAN1_TX_IRQHandler; USB High Priority or CAN1 TX
77DCDUSB_LP_CAN1_RX0_IRQHandler ; USB LowPriority or CAN1 RX0
78DCDCAN1_RX1_IRQHandler; CAN1 RX1
79DCDCAN1_SCE_IRQHandler; CAN1 SCE
80DCDEXTI9_5_IRQHandler; EXTI Line 9..5
81DCDTIM1_BRK_IRQHandler; TIM1 Break
82DCDTIM1_UP_IRQHandler; TIM1 Update
83DCDTIM1_TRG_COM_IRQHandler; TIM1 Trigger and Commutation
84DCDTIM1_CC_IRQHandler; TIM1 Capture Compare
85DCDTIM2_IRQHandler; TIM2
86DCDTIM3_IRQHandler; TIM3
87DCDTIM4_IRQHandler; TIM4
88DCDI2C1_EV_IRQHandler; I2C1 Event
89DCDI2C1_ER_IRQHandler; I2C1 Error
90DCDI2C2_EV_IRQHandler; I2C2 Event
91DCDI2C2_ER_IRQHandler; I2C2 Error
92DCDSPI1_IRQHandler; SPI1
93DCDSPI2_IRQHandler; SPI2
94DCDUSART1_IRQHandler; USART1
95DCDUSART2_IRQHandler; USART2
96DCDUSART3_IRQHandler; USART3
97DCDEXTI15_10_IRQHandler; EXTI Line 15..10
98DCDRTCAl

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top