You are on page 1of 8

startup_stm32.

1 /**
2 ******************************************************************************
3 * @file startup_stm32.s dedicated to STM32F401RETx device
4 * @author Ac6
5 * @version V1.0.0
6 * @date 2018-02-21
7 ******************************************************************************
8 */
9
10 .syntax unified
11 .cpu cortex-m4
12 .fpu softvfp
13 .thumb
14
15 .global g_pfnVectors
16 .global Default_Handler
17
18 /* start address for the initialization values of the .data section.
19 defined in linker script */
20 .word _sidata
21 /* start address for the .data section. defined in linker script */
22 .word _sdata
23 /* end address for the .data section. defined in linker script */
24 .word _edata
25 /* start address for the .bss section. defined in linker script */
26 .word _sbss
27 /* end address for the .bss section. defined in linker script */
28 .word _ebss
29
30 /**
31 * @brief This is the code that gets called when the processor first
32 * starts execution following a reset event. Only the absolutely
33 * necessary set is performed, after which the application
34 * supplied main() routine is called.
35 * @param None
36 * @retval : None
37 */
38
39
40 .section .text.Reset_Handler
41 .weak Reset_Handler
42 .type Reset_Handler, %function
43 Reset_Handler:
44 ldr r0, =_estack
45 mov sp, r0 /* set stack pointer */
46
47 /* Copy the data segment initializers from flash to SRAM */
48 ldr r0, =_sdata
49 ldr r1, =_edata
50 ldr r2, =_sidata
51 movs r3, #0
52 b LoopCopyDataInit
53
54 CopyDataInit:
55 ldr r4, [r2, r3]
56 str r4, [r0, r3]
57 adds r3, r3, #4
58
59 LoopCopyDataInit:
60 adds r4, r0, r3
61 cmp r4, r1
62 bcc CopyDataInit

Page 1
startup_stm32.s

63
64 /* Zero fill the bss segment. */
65 ldr r2, =_sbss
66 ldr r4, =_ebss
67 movs r3, #0
68 b LoopFillZerobss
69
70 FillZerobss:
71 str r3, [r2]
72 adds r2, r2, #4
73
74 LoopFillZerobss:
75 cmp r2, r4
76 bcc FillZerobss
77
78 /* Call the clock system intitialization function.*/
79 bl SystemInit
80 /* Call static constructors */
81 bl __libc_init_array
82 /* Call the application's entry point.*/
83 bl main
84
85 LoopForever:
86 b LoopForever
87
88 .size Reset_Handler, .-Reset_Handler
89
90 /**
91 * @brief This is the code that gets called when the processor receives an
92 * unexpected interrupt. This simply enters an infinite loop, preserving
93 * the system state for examination by a debugger.
94 *
95 * @param None
96 * @retval : None
97 */
98 .section .text.Default_Handler,"ax",%progbits
99 Default_Handler:
100 Infinite_Loop:
101 b Infinite_Loop
102 .size Default_Handler, .-Default_Handler
103 /******************************************************************************
104 *
105 * The STM32F401RETx vector table. Note that the proper constructs
106 * must be placed on this to ensure that it ends up at physical address
107 * 0x0000.0000.
108 *
109 ******************************************************************************/
110 .section .isr_vector,"a",%progbits
111 .type g_pfnVectors, %object
112 .size g_pfnVectors, .-g_pfnVectors
113
114
115 g_pfnVectors:
116 .word _estack
117 .word Reset_Handler
118 .word NMI_Handler
119 .word HardFault_Handler
120 .word MemManage_Handler
121 .word BusFault_Handler
122 .word UsageFault_Handler
123 .word 0
124 .word 0

Page 2
startup_stm32.s

125 .word 0
126 .word 0
127 .word SVC_Handler
128 .word DebugMon_Handler
129 .word 0
130 .word PendSV_Handler
131 .word SysTick_Handler
132 .word 0 /* Reserved
*/
133 .word PVD_IRQHandler /* PVD through EXTI line detection
interrupt */
134 .word TAMP_STAMP_IRQHandler /* Tamper and TimeStamp interrupts through
the EXTI line */
135 .word RTC_WKUP_IRQHandler /* RTC Wakeup interrupt through the EXTI
line */
136 .word FLASH_IRQHandler /* FLASH global interrupt
*/
137 .word RCC_IRQHandler /* RCC global interrupt
*/
138 .word EXTI0_IRQHandler /* EXTI Line0 interrupt
*/
139 .word EXTI1_IRQHandler /* EXTI Line1 interrupt
*/
140 .word EXTI2_IRQHandler /* EXTI Line2 interrupt
*/
141 .word EXTI3_IRQHandler /* EXTI Line3 interrupt
*/
142 .word EXTI4_IRQHandler /* EXTI Line4 interrupt
*/
143 .word 0 /* Reserved
*/
144 .word 0 /* Reserved
*/
145 .word 0 /* Reserved
*/
146 .word 0 /* Reserved
*/
147 .word 0 /* Reserved
*/
148 .word 0 /* Reserved
*/
149 .word 0 /* Reserved
*/
150 .word ADC_IRQHandler /* ADC1 global interrupt
*/
151 .word 0 /* Reserved
*/
152 .word 0 /* Reserved
*/
153 .word 0 /* Reserved
*/
154 .word 0 /* Reserved
*/
155 .word EXTI9_5_IRQHandler /* EXTI Line[9:5] interrupts
*/
156 .word TIM1_BRK_TIM9_IRQHandler /* TIM1 Break interrupt and TIM9 global
interrupt */
157 .word TIM1_UP_TIM10_IRQHandler /* TIM1 Update interrupt and TIM10 global
interrupt */
158 .word TIM1_TRG_COM_TIM11_IRQHandler /* TIM1 Trigger and Commutation interrupts
and TIM11 global interrupt */
159 .word TIM1_CC_IRQHandler /* TIM1 Capture Compare interrupt

Page 3
startup_stm32.s

*/
160 .word TIM2_IRQHandler /* TIM2 global interrupt
*/
161 .word TIM3_IRQHandler /* TIM3 global interrupt
*/
162 .word 0 /* Reserved
*/
163 .word I2C1_EV_IRQHandler /* I2C1 event interrupt
*/
164 .word I2C1_ER_IRQHandler /* I2C1 error interrupt
*/
165 .word I2C2_EV_IRQHandler /* I2C2 event interrupt
*/
166 .word I2C2_ER_IRQHandler /* I2C2 error interrupt
*/
167 .word SPI1_IRQHandler /* SPI1 global interrupt
*/
168 .word SPI2_IRQHandler /* SPI2 global interrupt
*/
169 .word 0 /* Reserved
*/
170 .word 0 /* Reserved
*/
171 .word 0 /* Reserved
*/
172 .word EXTI15_10_IRQHandler /* EXTI Line[15:10] interrupts
*/
173 .word RTC_Alarm_IRQHandler /* RTC Alarms (A and B) through EXTI line
interrupt */
174 .word OTG_FS_WKUP_IRQHandler /* USB On-The-Go FS Wakeup through EXTI
line interrupt */
175 .word 0 /* Reserved
*/
176 .word 0 /* Reserved
*/
177 .word 0 /* Reserved
*/
178 .word 0 /* Reserved
*/
179 .word 0 /* Reserved
*/
180 .word 0 /* Reserved
*/
181 .word SDIO_IRQHandler /* SDIO global interrupt
*/
182 .word 0 /* Reserved
*/
183 .word SPI3_IRQHandler /* SPI3 global interrupt
*/
184 .word 0 /* Reserved
*/
185 .word 0 /* Reserved
*/
186 .word 0 /* Reserved
*/
187 .word 0 /* Reserved
*/
188 .word 0 /* Reserved
*/
189 .word 0 /* Reserved
*/
190 .word 0 /* Reserved

Page 4
startup_stm32.s

*/
191 .word 0 /* Reserved
*/
192 .word 0 /* Reserved
*/
193 .word 0 /* Reserved
*/
194 .word 0 /* Reserved
*/
195 .word 0 /* Reserved
*/
196 .word 0 /* Reserved
*/
197 .word 0 /* Reserved
*/
198 .word 0 /* Reserved
*/
199 .word OTG_FS_IRQHandler /* USB On The Go FS global interrupt
*/
200 .word 0 /* Reserved
*/
201 .word 0 /* Reserved
*/
202 .word 0 /* Reserved
*/
203 .word 0 /* Reserved
*/
204 .word I2C3_EV_IRQHandler /* I2C3 event interrupt
*/
205 .word I2C3_ER_IRQHandler /* I2C3 error interrupt
*/
206 .word 0 /* Reserved
*/
207 .word 0 /* Reserved
*/
208 .word 0 /* Reserved
*/
209 .word 0 /* Reserved
*/
210 .word 0 /* Reserved
*/
211 .word 0 /* Reserved
*/
212 .word 0 /* Reserved
*/
213 .word FPU_IRQHandler /* Floating point interrupt
*/
214 .word 0 /* Reserved
*/
215 .word 0 /* Reserved
*/
216 .word SPI4_IRQHandler /* SPI4 global interrupt
*/
217
218 /*******************************************************************************
219 *
220 * Provide weak aliases for each Exception handler to the Default_Handler.
221 * As they are weak aliases, any function with the same name will override
222 * this definition.
223 *
224 *******************************************************************************/
225

Page 5
startup_stm32.s

226 .weak NMI_Handler


227 .thumb_set NMI_Handler,Default_Handler
228
229 .weak HardFault_Handler
230 .thumb_set HardFault_Handler,Default_Handler
231
232 .weak MemManage_Handler
233 .thumb_set MemManage_Handler,Default_Handler
234
235 .weak BusFault_Handler
236 .thumb_set BusFault_Handler,Default_Handler
237
238 .weak UsageFault_Handler
239 .thumb_set UsageFault_Handler,Default_Handler
240
241 .weak SVC_Handler
242 .thumb_set SVC_Handler,Default_Handler
243
244 .weak DebugMon_Handler
245 .thumb_set DebugMon_Handler,Default_Handler
246
247 .weak PendSV_Handler
248 .thumb_set PendSV_Handler,Default_Handler
249
250 .weak SysTick_Handler
251 .thumb_set SysTick_Handler,Default_Handler
252
253 .weak PVD_IRQHandler
254 .thumb_set PVD_IRQHandler,Default_Handler
255
256 .weak TAMP_STAMP_IRQHandler
257 .thumb_set TAMP_STAMP_IRQHandler,Default_Handler
258
259 .weak RTC_WKUP_IRQHandler
260 .thumb_set RTC_WKUP_IRQHandler,Default_Handler
261
262 .weak FLASH_IRQHandler
263 .thumb_set FLASH_IRQHandler,Default_Handler
264
265 .weak RCC_IRQHandler
266 .thumb_set RCC_IRQHandler,Default_Handler
267
268 .weak EXTI0_IRQHandler
269 .thumb_set EXTI0_IRQHandler,Default_Handler
270
271 .weak EXTI1_IRQHandler
272 .thumb_set EXTI1_IRQHandler,Default_Handler
273
274 .weak EXTI2_IRQHandler
275 .thumb_set EXTI2_IRQHandler,Default_Handler
276
277 .weak EXTI3_IRQHandler
278 .thumb_set EXTI3_IRQHandler,Default_Handler
279
280 .weak EXTI4_IRQHandler
281 .thumb_set EXTI4_IRQHandler,Default_Handler
282
283 .weak ADC_IRQHandler
284 .thumb_set ADC_IRQHandler,Default_Handler
285
286 .weak EXTI9_5_IRQHandler
287 .thumb_set EXTI9_5_IRQHandler,Default_Handler

Page 6
startup_stm32.s

288
289 .weak TIM1_BRK_TIM9_IRQHandler
290 .thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler
291
292 .weak TIM1_UP_TIM10_IRQHandler
293 .thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler
294
295 .weak TIM1_TRG_COM_TIM11_IRQHandler
296 .thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler
297
298 .weak TIM1_CC_IRQHandler
299 .thumb_set TIM1_CC_IRQHandler,Default_Handler
300
301 .weak TIM2_IRQHandler
302 .thumb_set TIM2_IRQHandler,Default_Handler
303
304 .weak TIM3_IRQHandler
305 .thumb_set TIM3_IRQHandler,Default_Handler
306
307 .weak I2C1_EV_IRQHandler
308 .thumb_set I2C1_EV_IRQHandler,Default_Handler
309
310 .weak I2C1_ER_IRQHandler
311 .thumb_set I2C1_ER_IRQHandler,Default_Handler
312
313 .weak I2C2_EV_IRQHandler
314 .thumb_set I2C2_EV_IRQHandler,Default_Handler
315
316 .weak I2C2_ER_IRQHandler
317 .thumb_set I2C2_ER_IRQHandler,Default_Handler
318
319 .weak SPI1_IRQHandler
320 .thumb_set SPI1_IRQHandler,Default_Handler
321
322 .weak SPI2_IRQHandler
323 .thumb_set SPI2_IRQHandler,Default_Handler
324
325 .weak EXTI15_10_IRQHandler
326 .thumb_set EXTI15_10_IRQHandler,Default_Handler
327
328 .weak RTC_Alarm_IRQHandler
329 .thumb_set RTC_Alarm_IRQHandler,Default_Handler
330
331 .weak OTG_FS_WKUP_IRQHandler
332 .thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler
333
334 .weak SDIO_IRQHandler
335 .thumb_set SDIO_IRQHandler,Default_Handler
336
337 .weak SPI3_IRQHandler
338 .thumb_set SPI3_IRQHandler,Default_Handler
339
340 .weak OTG_FS_IRQHandler
341 .thumb_set OTG_FS_IRQHandler,Default_Handler
342
343 .weak I2C3_EV_IRQHandler
344 .thumb_set I2C3_EV_IRQHandler,Default_Handler
345
346 .weak I2C3_ER_IRQHandler
347 .thumb_set I2C3_ER_IRQHandler,Default_Handler
348
349 .weak FPU_IRQHandler

Page 7
startup_stm32.s

350 .thumb_set FPU_IRQHandler,Default_Handler


351
352 .weak SPI4_IRQHandler
353 .thumb_set SPI4_IRQHandler,Default_Handler
354
355 .weak SystemInit
356
357 /************************ (C) COPYRIGHT Ac6 *****END OF FILE****/
358

Page 8

You might also like