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

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

时间:11-27 来源:互联网 点击:
arm_IRQHandler; RTC Alarm through EXTI Line
99DCDUSBWakeUp_IRQHandler; USB Wakeup from suspend
100DCDTIM8_BRK_IRQHandler; TIM8 Break
101DCDTIM8_UP_IRQHandler; TIM8 Update
102DCDTIM8_TRG_COM_IRQHandler; TIM8 Trigger and Commutation
103DCDTIM8_CC_IRQHandler; TIM8 Capture Compare
104DCDADC3_IRQHandler; ADC3
105DCDFSMC_IRQHandler; FSMC
106DCDSDIO_IRQHandler; SDIO
107DCDTIM5_IRQHandler; TIM5
108DCDSPI3_IRQHandler; SPI3
109DCDUART4_IRQHandler; UART4
110DCDUART5_IRQHandler; UART5
111DCDTIM6_IRQHandler; TIM6
112DCDTIM7_IRQHandler; TIM7
113DCDDMA2_Channel1_IRQHandler; DMA2 Channel1
114DCDDMA2_Channel2_IRQHandler; DMA2 Channel2
115DCDDMA2_Channel3_IRQHandler; DMA2 Channel3
116DCDDMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5
117 __Vectors_End
118 __Vectors_SizeEQU__Vectors_End - __Vectors
119AREA|.text|, CODE, READONLY ;代码段定义
120
121 ; Reset Handler
122 ;利用PROC、ENDP这一对伪指令把程序段分为若干个过程,使程序的结构加清晰
123 Reset_HandlerPROC;过程的开始
124EXPORTReset_Handler[WEAK];[WEAK] 弱定义,意思是如果在别处也定义该标号(函数),在链接时用别处的地址。
125;如果没有其它定方定义,编译器也不报错,以此处地址进行链接。
126;EXPORT提示编译器该标号可以为外部文件引用。
127IMPORT__main;通知编译器要使用的标号在其他文件
128IMPORTSystemInit
129LDRR0, =SystemInit
130BLXR0;BX是ARM指令集和THUMB指令集之间程序的跳转
131LDRR0, =__main ;使用“=”表示LDR目前是伪指令不是标准指令。这里是把__main的地址给RO。
132BXR0;BX是ARM指令集和THUMB指令集之间程序的跳转
133ENDP;过程的结束
134
135 ; Dummy Exception Handlers (infinite loops which can be modified)
136 NMI_HandlerPROC
137EXPORTNMI_Handler[WEAK]
138B.;原地跳转(即无限循环),
139ENDP
140 HardFault_Handler
141PROC
142EXPORTHardFault_Handler[WEAK]
143B.
144ENDP
145 MemManage_Handler
146PROC
147EXPORTMemManage_Handler[WEAK]
148B.
149ENDP
150 BusFault_Handler
151PROC
152EXPORTBusFault_Handler[WEAK]
153B.
154ENDP
155 UsageFault_Handler
156PROC
157EXPORTUsageFault_Handler[WEAK]
158B.
159ENDP
160 SVC_HandlerPROC
161EXPORTSVC_Handler[WEAK]
162B.
163ENDP
164 DebugMon_Handler
165PROC
166EXPORTDebugMon_Handler[WEAK]
167B.
168ENDP
169 PendSV_HandlerPROC
170EXPORTPendSV_Handler[WEAK]
171B.
172ENDP
173 SysTick_Handler PROC
174EXPORTSysTick_Handler[WEAK]
175B.
176ENDP
177 Default_Handler PROC
178EXPORTWWDG_IRQHandler[WEAK]
179EXPORTPVD_IRQHandler[WEAK]
180EXPORTTAMPER_IRQHandler[WEAK]
181EXPORTRTC_IRQHandler[WEAK]
182EXPORTFLASH_IRQHandler[WEAK]
183EXPORTRCC_IRQHandler[WEAK]
184EXPORTEXTI0_IRQHandler[WEAK]
185EXPORTEXTI1_IRQHandler[WEAK]
186EXPORTEXTI2_IRQHandler[WEAK]
187EXPORTEXTI3_IRQHandler[WEAK]
188EXPORTEXTI4_IRQHandler[WEAK]
189EXPORTDMA1_Channel1_IRQHandler[WEAK]
190EXPORTDMA1_Channel2_IRQHandler[WEAK]
191EXPORTDMA1_Channel3_IRQHandler[WEAK]
192EXPORTDMA1_Channel4_IRQHandler[WEAK]
193EXPORTDMA1_Channel5_IRQHandler[WEAK]
194EXPORTDMA1_Channel6_IRQHandler[WEAK]
195EXPORTDMA1_Channel7_IRQHandler[WEAK]
196EXPORTADC1_2_IRQHandler[WEAK]
197EXPORTUSB_HP_CAN1_TX_IRQHandler[WEAK]
198EXPORTUSB_LP_CAN1_RX0_IRQHandler [WEAK]
199EXPORTCAN1_RX1_IRQHandler[WEAK]
200EXPORTCAN1_SCE_IRQHandler[WEAK]
201EXPORTEXTI9_5_IRQHandler[WEAK]
202EXPORTTIM1_BRK_IRQHandler[WEAK]
203EXPORTTIM1_UP_IRQHandler[WEAK]
204EXPORTTIM1_TRG_COM_IRQHandler[WEAK]
205EXPORTTIM1_CC_IRQHandler[WEAK]
206EXPORTTIM2_IRQHandler[WEAK]
207EXPORTTIM3_IRQHandler[WEAK]
208EXPORTTIM4_IRQHandler[WEAK]
209EXPORTI2C1_EV_IRQHandler[WEAK]
210EXPORTI2C1_ER_IRQHandler[WEAK]
211EXPORTI2C2_EV_IRQHandler[WEAK]
212EXPORTI2C2_ER_IRQHandler[WEAK]
213EXPORTSPI1_IRQHandler[WEAK]
214EXPORTSPI2_IRQHandler[WEAK]
215EXPORTUSART1_IRQHandler[WEAK]
216EXPORTUSART2_IRQHandler[WEAK]
217EXPORTUSART3_IRQHandler[WEAK]
218EXPORTEXTI15_10_IRQHandler[WEAK]
219EXPORTRTCAlarm_IRQHandler[WEAK]
220EXPORTUSBWakeUp_IRQHandler[WEAK]
221EXPORTTIM8_BRK_IRQHandler[WEAK]
222EXPORTTIM8_UP_IRQHandler[WEAK]
223EXPORTTIM8_TRG_COM_IRQHandler[WEAK]
224EXPORTTIM8_CC_IRQHandler[WEAK]
225EXPORTADC3_IRQHandler[WEAK]
226EXPORTFSMC_IRQHandler[WEAK]
227EXPORTSDIO_IRQHandler[WEAK]
228EXPORTTIM5_IRQHandler[WEAK]
229EXPORTSPI3_IRQHandler[WEAK]
230EXPORTUART4_IRQHandler[WEAK]
231EXPORTUART5_IRQHandler[WEAK]
232EXPORTTIM6_IRQHandler[WEAK]
233EXPORTTIM7_IRQHandler[WEAK]
234EXPORTDMA2_Channel1_IRQHandler[WEAK]
235EXPORTDMA2_Channel2_IRQHandler[WEAK]
236EXPORTDMA2_Channel3_IRQHandler[WEAK]
237EXPORTDMA2_Channel4_5_IRQHandler [WEAK]
238 WWDG_IRQHandler
239 PVD_IRQHandler
240 TAMPER_IRQHandler
241 RTC_IRQHandler
242 FLASH_IRQHandler
243 RCC_IRQHandler
244 EXTI0_IRQHandler
245 EXTI1_IRQHandler
246 EXTI2_IRQHandler
247 EXTI3_IRQHandler
248 EXTI4_IRQHandler
249 DMA1_Channel1_IRQHandler
250 DMA1_Channel2_IRQHandler
251 DMA1_Channel3_IRQHandler
252 DMA1_Channel4_IRQHandler
253 DMA1_Channel5_IRQHandler
254 DMA1_Channel6_IRQHandler
255 DMA1_Channel7_IRQHandler
256 ADC1_2_IRQHandler
257 USB_HP_CAN1_TX_IRQHandler
258 USB_LP_CAN1_RX0_IRQHandler
259 CAN1_RX1_IRQHandler
260 CAN1_SCE_IRQHandler
261 EXTI9_5_IRQHandler
262 TIM1_BRK_IRQHandler
263 TIM1_UP_IRQHandler
264 TIM1_TRG_COM_IRQHandler
265 TIM1_CC_IRQHandler
266 TIM2_IRQHandler
267 TIM3_IRQHandler
268 TIM4_IRQHandler
269 I2C1_EV_IRQHandler
270 I2C1_ER_IRQHandler
271 I2C2_EV_IRQHandler
272 I2C2_ER_IRQHandler
273 SPI1_IRQHandler
274 SPI2_IRQHandler
275 USART1_IRQHandler
276 USART2_IRQHandler
277 USART3_IRQHandler
278 EXTI15_10_IRQHandler
279 RTCAlarm_IRQHandler
280 USBWakeUp_IRQHandler
281 TIM8_BRK_IRQHandler
282 TIM8_UP_IRQHandler
283 TIM8_TRG_COM_IRQHandler
284 TIM8_CC_IRQHandler
285 ADC3_IRQHandler
286 FSMC_IRQHandler
287 SDIO_IRQHandler
288 TIM5_IRQHandler
289 SPI3_IRQHandler
290 UART4_IRQHandler
291 UART5_IRQHandler
292 TIM6_IRQHandler
293 TIM7_IRQHandler
294 DMA2_Channel1_IRQHandler
295 DMA2_Channel2_IRQHandler
296 DMA2_Channel3_IRQHandler
297 DMA2_Channel4_5_IRQHandler
298B.
299ENDP
300ALIGN ;填充字节使地址对齐
301 ;*******************************************************************************
302 ; User Stack and Heap initialization
303 ;*******************************************************************************
304 ;堆和栈的初始化
305IF:DEF:__MICROLIB ;“DEF”的用法——:DEF:X 就是说X定义了则为真,否则为假
306;如果定义了MICORLIB,
307EXPORT__initial_sp;则将栈顶地址,
308EXPORT__heap_base;堆起始地址赋予全局属性,
309EXPORT__heap_limit;堆末端界限地址赋予全局属性,使外部程序可调用
310
311ELSE;如果没定义__MICROLIB,则使用默认的C运行时库
312
313IMPORT__use_two_region_memory;;通知编译器要使用的标号在其他文件__use_two_region_memory
314EXPORT__user_initial_stackheap ;声明全局标号__user_initial_stackheap,这样外程序也可调用此标号
315;则进行堆栈和堆的赋值,在__main函数执行过程中调用
316
317;如果使用默认的C库,程序启动过程中就不会执行该标号下的代码
318 __user_initial_stackheap;标号__user_initial_stackheap,表示用户堆栈初始化程序入口
319;//则进行堆栈和堆的赋值,在__main函数执行过程中调用。
320LDRR0, =Heap_Mem;保存堆始地址
321LDRR1, =(Stack_Mem + Stack_Size) ;保存栈的大小
322LDRR2, = (Heap_Mem +Heap_Size);保存堆的大小
323LDRR3, = Stack_Mem;保存栈顶指针
324BXLR
325ALIGN;填充字节使地址对齐
326
327ENDIF
328
329END

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

网站地图

Top