File startup_stm32f407.c¶
File List > port > stm32f4 > startup_stm32f407.c
Go to the documentation of this file
#if defined(STM32F407xx) && !defined(ARDUINO)
#include <stdint.h>
#include <string.h>
/* Symbols defined by linker script */
extern uint32_t _sidata; /* Start of .data initializers in flash */
extern uint32_t _sdata; /* Start of .data in SRAM */
extern uint32_t _edata; /* End of .data in SRAM */
extern uint32_t _sbss; /* Start of .bss */
extern uint32_t _ebss; /* End of .bss */
extern uint32_t _estack; /* Top of stack */
extern int main(void);
extern void syn_port_system_init(void);
extern void SysTick_Handler(void);
/* Default handler — infinite loop for unhandled interrupts */
void Default_Handler(void)
{
for (;;) {
__asm volatile("bkpt #0");
}
}
/* Weak alias all handlers to Default_Handler */
void NMI_Handler(void) __attribute__((weak, alias("Default_Handler")));
void HardFault_Handler(void) __attribute__((weak, alias("Default_Handler")));
void MemManage_Handler(void) __attribute__((weak, alias("Default_Handler")));
void BusFault_Handler(void) __attribute__((weak, alias("Default_Handler")));
void UsageFault_Handler(void) __attribute__((weak, alias("Default_Handler")));
void SVC_Handler(void) __attribute__((weak, alias("Default_Handler")));
void DebugMon_Handler(void) __attribute__((weak, alias("Default_Handler")));
void PendSV_Handler(void) __attribute__((weak, alias("Default_Handler")));
/* SysTick_Handler is defined in port_stm32f4.c — not weak */
/* Reset handler — C runtime init */
void Reset_Handler(void)
{
/* Copy .data from flash to SRAM */
uint32_t *src = &_sidata;
uint32_t *dst = &_sdata;
while ((uintptr_t)dst < (uintptr_t)&_edata) {
*dst++ = *src++;
}
/* Zero .bss */
dst = &_sbss;
while ((uintptr_t)dst < (uintptr_t)&_ebss) {
*dst++ = 0;
}
/* Platform init (SysTick, clocks) */
syn_port_system_init();
/* Jump to main */
main();
/* If main returns, halt */
for (;;) {
__asm volatile("bkpt #0");
}
}
/* Vector table — placed at 0x08000000 by linker script */
__attribute__((section(".isr_vector"), used)) void (*const g_pfnVectors[])(void) = {
(void (*)(void))(&_estack), /* Initial SP */
Reset_Handler, /* Reset */
NMI_Handler, /* NMI */
HardFault_Handler, /* Hard Fault */
MemManage_Handler, /* Mem Manage */
BusFault_Handler, /* Bus Fault */
UsageFault_Handler, /* Usage Fault */
0,
0,
0,
0, /* Reserved */
SVC_Handler, /* SVCall */
DebugMon_Handler, /* Debug Monitor */
0, /* Reserved */
PendSV_Handler, /* PendSV */
SysTick_Handler, /* SysTick */
};
#endif /* STM32F407xx && !ARDUINO */