aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2015-12-21 00:16:57 +0100
committerTrygve Laugstøl <trygvis@inamo.no>2015-12-21 00:16:57 +0100
commitaf5b3792973e876a860dae5dc7b7f9140f0e3a24 (patch)
tree764c85b96e9d6070902b4a5d2676a7dc3bf03929
parentacf22f18828595a0731d3558b7e2d2ba321c926d (diff)
downloadstm32f103-playground-af5b3792973e876a860dae5dc7b7f9140f0e3a24.tar.gz
stm32f103-playground-af5b3792973e876a860dae5dc7b7f9140f0e3a24.tar.bz2
stm32f103-playground-af5b3792973e876a860dae5dc7b7f9140f0e3a24.tar.xz
stm32f103-playground-af5b3792973e876a860dae5dc7b7f9140f0e3a24.zip
o Moving more init code to C.
-rw-r--r--CMakeLists.txt6
-rw-r--r--README.md2
-rw-r--r--cmake/stm32.ld21
-rw-r--r--init_high.cpp197
-rw-r--r--init_high.h117
-rw-r--r--init_low.s217
6 files changed, 333 insertions, 227 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 99b97dd..7c09d38 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -26,7 +26,7 @@ target_include_directories(tinyprintf PUBLIC tinyprintf)
#########################################################################################################
# test1
-add_executable(test1.elf test1.cpp init_low.s init_high.cpp include/stm32f10x_conf.h
+add_executable(test1.elf test1.cpp init_low.s init_high.cpp init_high.h include/stm32f10x_conf.h
# http://www.sparetimelabs.com/tinyprintf/tinyprintf.php
tinyprintf/tinyprintf.c tinyprintf/tinyprintf.h
tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/CoreSupport/core_cm3.c
@@ -50,7 +50,7 @@ add_extra_commands(test1.elf)
#########################################################################################################
# serial1
-add_executable(serial1.elf serial1.cpp init_low.s init_high.cpp include/stm32f10x_conf.h
+add_executable(serial1.elf serial1.cpp init_low.s init_high.cpp init_high.h include/stm32f10x_conf.h
debug.cpp debug.h
# http://www.sparetimelabs.com/tinyprintf/tinyprintf.php
tinyprintf/tinyprintf.c tinyprintf/tinyprintf.h
@@ -74,7 +74,7 @@ add_extra_commands(serial1.elf)
#########################################################################################################
# serial2
-add_executable(serial2.elf serial2.cpp init_low.s init_high.cpp include/stm32f10x_conf.h
+add_executable(serial2.elf serial2.cpp init_low.s init_high.cpp init_high.h include/stm32f10x_conf.h
debug.cpp debug.h
tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/CoreSupport/core_cm3.c
tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c
diff --git a/README.md b/README.md
index 22e36a7..b6c46f8 100644
--- a/README.md
+++ b/README.md
@@ -8,6 +8,8 @@
* http://www.st.com/web/en/resource/technical/document/datasheet/CD00161566.pdf
* http://www.banggood.com/ARM-Cortex-M3-STM32F103C8T6-STM32-Minimum-System-Development-Board-p-920184.html
* http://www.lctech-inc.com/Hardware/Detail.aspx?id=0172e854-77b0-43d5-b300-68e570c914fd
+* https://github.com/dwelch67/stm32_samples
+* http://stackoverflow.com/questions/9565921/cortex-m3-initialisation
* http://stackoverflow.com/questions/32422075/arm-bare-metal-binary-linking
* https://github.com/ckormanyos/real-time-cpp/blob/master/ref_app/target/micros/stm32f100/make/stm32f100.ld
diff --git a/cmake/stm32.ld b/cmake/stm32.ld
index d15b4c2..fc69574 100644
--- a/cmake/stm32.ld
+++ b/cmake/stm32.ld
@@ -1,11 +1,5 @@
-/*
- * https://github.com/barrybingo/SunMoonSim/blob/master/LinkerScript/STM32F103-MD.ld
- */
-
-/* Entry Point */
ENTRY(_Reset_Handler)
-/* Specify the memory areas */
MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 64K
@@ -17,10 +11,19 @@ _estack = ORIGIN(RAM) + LENGTH(RAM);
SECTIONS
{
+ /* Put the ISR section at the start of the flash area */
+ .isr :
+ {
+ /* The first word has to be the initial stack pointer */
+ LONG(__initial_stack_pointer);
+ */init_high.cpp.obj(.isr_vectors)
+ } >FLASH
+ ASSERT(SIZEOF(.isr) > 100, "The isr_vectors section is too small")
+ ASSERT(SIZEOF(.isr) < 1000, "The isr_vectors section is too big")
+ ASSERT(ADDR(.isr) == ORIGIN(FLASH), "The isr_vectors section was not placed at the start of the flash area")
+
.text :
{
- *(.isr_vectors)
- init.s:(.text)
*(.text)
KEEP(*(.text.*))
*(.rodata*)
@@ -45,4 +48,6 @@ SECTIONS
_bss_start = ADDR(.bss);
_bss_end = _bss_start + SIZEOF(.bss);
+
+ __initial_stack_pointer = ORIGIN(RAM) + LENGTH(RAM) - 1;
}
diff --git a/init_high.cpp b/init_high.cpp
index 235a649..48abe70 100644
--- a/init_high.cpp
+++ b/init_high.cpp
@@ -1,9 +1,129 @@
#include <stdint.h>
+/**
+ * Symbols that are defined by the linker
+ */
extern uint32_t _copy_data_load, _copy_data_store, _copy_data_store_end;
extern uint32_t _bss_start, _bss_end;
+extern "C" {
+
+/**
+ * Declare all the interrupt/event handlers as weak symbols and make them aliases of the default handler.
+ */
+
+void Default_Handler() __attribute__((weak));
+
+void _Reset_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void NMI_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void HardFault_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void MemManage_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void BusFault_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void UsageFault_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void SVC_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DebugMon_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void PendSV_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void SysTick_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void WWDG_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void PVD_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TAMPER_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void RTC_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void FLASH_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void RCC_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI0_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI1_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI3_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI4_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel1_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel3_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel4_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel5_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel6_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel7_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void ADC1_2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void USB_HP_CAN1_TX_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void USB_LP_CAN1_RX0_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void CAN1_RX1_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void CAN1_SCE_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI9_5_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM1_BRK_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM1_UP_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM1_TRG_COM_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM1_CC_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM3_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM4_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void I2C1_EV_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void I2C1_ER_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void I2C2_EV_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void I2C2_ER_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void SPI1_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void SPI2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void USART1_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void USART2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void USART3_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI15_10_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void RTCAlarm_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void USBWakeUp_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+}
+
extern int main();
+
+extern "C" int halt();
extern "C" int init_high();
int init_high() {
@@ -25,3 +145,80 @@ int init_high() {
return main();
}
+
+void Default_Handler() {
+ halt();
+}
+
+/*
+ *
+ */
+__attribute__((section(".isr_vectors")))
+uint32_t isr_vectors[74] = {
+ (uint32_t) _Reset_Handler,
+ (uint32_t) NMI_Handler,
+ (uint32_t) HardFault_Handler,
+ (uint32_t) MemManage_Handler,
+ (uint32_t) BusFault_Handler,
+ (uint32_t) UsageFault_Handler,
+ 0,
+ 0,
+ 0,
+ 0,
+ (uint32_t) SVC_Handler,
+ (uint32_t) DebugMon_Handler,
+ 0,
+ (uint32_t) PendSV_Handler,
+ (uint32_t) SysTick_Handler,
+ (uint32_t) WWDG_IRQHandler,
+ (uint32_t) PVD_IRQHandler,
+ (uint32_t) TAMPER_IRQHandler,
+ (uint32_t) RTC_IRQHandler,
+ (uint32_t) FLASH_IRQHandler,
+ (uint32_t) RCC_IRQHandler,
+ (uint32_t) EXTI0_IRQHandler,
+ (uint32_t) EXTI1_IRQHandler,
+ (uint32_t) EXTI2_IRQHandler,
+ (uint32_t) EXTI3_IRQHandler,
+ (uint32_t) EXTI4_IRQHandler,
+ (uint32_t) DMA1_Channel1_IRQHandler,
+ (uint32_t) DMA1_Channel2_IRQHandler,
+ (uint32_t) DMA1_Channel3_IRQHandler,
+ (uint32_t) DMA1_Channel4_IRQHandler,
+ (uint32_t) DMA1_Channel5_IRQHandler,
+ (uint32_t) DMA1_Channel6_IRQHandler,
+ (uint32_t) DMA1_Channel7_IRQHandler,
+ (uint32_t) ADC1_2_IRQHandler,
+ (uint32_t) USB_HP_CAN1_TX_IRQHandler,
+ (uint32_t) USB_LP_CAN1_RX0_IRQHandler,
+ (uint32_t) CAN1_RX1_IRQHandler,
+ (uint32_t) CAN1_SCE_IRQHandler,
+ (uint32_t) EXTI9_5_IRQHandler,
+ (uint32_t) TIM1_BRK_IRQHandler,
+ (uint32_t) TIM1_UP_IRQHandler,
+ (uint32_t) TIM1_TRG_COM_IRQHandler,
+ (uint32_t) TIM1_CC_IRQHandler,
+ (uint32_t) TIM2_IRQHandler,
+ (uint32_t) TIM3_IRQHandler,
+ (uint32_t) TIM4_IRQHandler,
+ (uint32_t) I2C1_EV_IRQHandler,
+ (uint32_t) I2C1_ER_IRQHandler,
+ (uint32_t) I2C2_EV_IRQHandler,
+ (uint32_t) I2C2_ER_IRQHandler,
+ (uint32_t) SPI1_IRQHandler,
+ (uint32_t) SPI2_IRQHandler,
+ (uint32_t) USART1_IRQHandler,
+ (uint32_t) USART2_IRQHandler,
+ (uint32_t) USART3_IRQHandler,
+ (uint32_t) EXTI15_10_IRQHandler,
+ (uint32_t) RTCAlarm_IRQHandler,
+ (uint32_t) USBWakeUp_IRQHandler,
+ (uint32_t)0,
+ (uint32_t)0,
+ (uint32_t)0,
+ (uint32_t)0,
+ (uint32_t)0,
+ (uint32_t)0,
+ (uint32_t)0,
+ (uint32_t)0
+};
diff --git a/init_high.h b/init_high.h
new file mode 100644
index 0000000..f80ac25
--- /dev/null
+++ b/init_high.h
@@ -0,0 +1,117 @@
+#ifndef INIT_HIGH_H
+#define INIT_HIGH_H
+
+extern "C" {
+
+/**
+ * Declare all the interrupt/event handlers as weak symbols and make them aliases of the default handler.
+ */
+
+void _Reset_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void NMI_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void HardFault_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void MemManage_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void BusFault_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void UsageFault_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void SVC_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DebugMon_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void PendSV_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void SysTick_Handler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void WWDG_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void PVD_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TAMPER_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void RTC_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void FLASH_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void RCC_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI0_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI1_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI3_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI4_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel1_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel3_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel4_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel5_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel6_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void DMA1_Channel7_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void ADC1_2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void USB_HP_CAN1_TX_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void USB_LP_CAN1_RX0_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void CAN1_RX1_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void CAN1_SCE_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI9_5_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM1_BRK_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM1_UP_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM1_TRG_COM_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM1_CC_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM3_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void TIM4_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void I2C1_EV_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void I2C1_ER_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void I2C2_EV_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void I2C2_ER_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void SPI1_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void SPI2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void USART1_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void USART2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void USART3_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void EXTI15_10_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void RTCAlarm_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+
+void USBWakeUp_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
+}
+
+#endif INIT_HIGH_H
diff --git a/init_low.s b/init_low.s
index 1c3d10e..4f84246 100644
--- a/init_low.s
+++ b/init_low.s
@@ -1,77 +1,7 @@
-/*
-https://github.com/dwelch67/stm32_samples
-http://stackoverflow.com/questions/9565921/cortex-m3-initialisation
-*/
-
.syntax unified
.cpu cortex-m3
.thumb
-.section .isr_vectors
-
-/* TODO: Move this to C code */
-.global vectors
-vectors:
- .word 0x20001000 /* TODO: this should come from the linker */
- .word _Reset_Handler
- .word NMI_Handler
- .word HardFault_Handler
- .word MemManage_Handler
- .word BusFault_Handler
- .word UsageFault_Handler
- .word 0 /* Not used */
- .word 0 /* Not used */
- .word 0 /* Not used */
- .word 0 /* Not used */
- .word SVC_Handler
- .word DebugMon_Handler
- .word 0 /* Not used */
- .word PendSV_Handler
- .word SysTick_Handler
- .word WWDG_IRQHandler
- .word PVD_IRQHandler
- .word TAMPER_IRQHandler
- .word RTC_IRQHandler
- .word FLASH_IRQHandler
- .word RCC_IRQHandler
- .word EXTI0_IRQHandler
- .word EXTI1_IRQHandler
- .word EXTI2_IRQHandler
- .word EXTI3_IRQHandler
- .word EXTI4_IRQHandler
- .word DMA1_Channel1_IRQHandler
- .word DMA1_Channel2_IRQHandler
- .word DMA1_Channel3_IRQHandler
- .word DMA1_Channel4_IRQHandler
- .word DMA1_Channel5_IRQHandler
- .word DMA1_Channel6_IRQHandler
- .word DMA1_Channel7_IRQHandler
- .word ADC1_2_IRQHandler
- .word USB_HP_CAN1_TX_IRQHandler
- .word USB_LP_CAN1_RX0_IRQHandler
- .word CAN1_RX1_IRQHandler
- .word CAN1_SCE_IRQHandler
- .word EXTI9_5_IRQHandler
- .word TIM1_BRK_IRQHandler
- .word TIM1_UP_IRQHandler
- .word TIM1_TRG_COM_IRQHandler
- .word TIM1_CC_IRQHandler
- .word TIM2_IRQHandler
- .word TIM3_IRQHandler
- .word TIM4_IRQHandler
- .word I2C1_EV_IRQHandler
- .word I2C1_ER_IRQHandler
- .word I2C2_EV_IRQHandler
- .word I2C2_ER_IRQHandler
- .word SPI1_IRQHandler
- .word SPI2_IRQHandler
- .word USART1_IRQHandler
- .word USART2_IRQHandler
- .word USART3_IRQHandler
- .word EXTI15_10_IRQHandler
- .word RTCAlarm_IRQHandler
- .word USBWakeUp_IRQHandler
-
/* VERY significant */
.section .text
@@ -110,150 +40,5 @@ BusFault_Handler:
UsageFault_Handler:
b halt
-/*
-TODO: replace with functions like this:
-void TIM2_IRQHandler() __attribute__ ((weak, alias ("Default_Handler")));
-*/
-
-.weak SVC_Handler
-.thumb_set SVC_Handler, halt
-
-.weak DebugMon_Handler
-.thumb_set DebugMon_Handler, halt
-
-.weak PendSV_Handler
-.thumb_set PendSV_Handler, halt
-
-.weak SysTick_Handler
-.thumb_set SysTick_Handler, halt
-
-.weak WWDG_IRQHandler
-.thumb_set WWDG_IRQHandler, halt
-
-.weak PVD_IRQHandler
-.thumb_set PVD_IRQHandler, halt
-
-.weak TAMPER_IRQHandler
-.thumb_set TAMPER_IRQHandler, halt
-
-.weak RTC_IRQHandler
-.thumb_set RTC_IRQHandler, halt
-
-.weak FLASH_IRQHandler
-.thumb_set FLASH_IRQHandler, halt
-
-.weak RCC_IRQHandler
-.thumb_set RCC_IRQHandler, halt
-
-.weak EXTI0_IRQHandler
-.thumb_set EXTI0_IRQHandler, halt
-
-.weak EXTI1_IRQHandler
-.thumb_set EXTI1_IRQHandler, halt
-
-.weak EXTI2_IRQHandler
-.thumb_set EXTI2_IRQHandler, halt
-
-.weak EXTI3_IRQHandler
-.thumb_set EXTI3_IRQHandler, halt
-
-.weak EXTI4_IRQHandler
-.thumb_set EXTI4_IRQHandler, halt
-
-.weak DMA1_Channel1_IRQHandler
-.thumb_set DMA1_Channel1_IRQHandler, halt
-
-.weak DMA1_Channel2_IRQHandler
-.thumb_set DMA1_Channel2_IRQHandler, halt
-
-.weak DMA1_Channel3_IRQHandler
-.thumb_set DMA1_Channel3_IRQHandler, halt
-
-.weak DMA1_Channel4_IRQHandler
-.thumb_set DMA1_Channel4_IRQHandler, halt
-
-.weak DMA1_Channel5_IRQHandler
-.thumb_set DMA1_Channel5_IRQHandler, halt
-
-.weak DMA1_Channel6_IRQHandler
-.thumb_set DMA1_Channel6_IRQHandler, halt
-
-.weak DMA1_Channel7_IRQHandler
-.thumb_set DMA1_Channel7_IRQHandler, halt
-
-.weak ADC1_2_IRQHandler
-.thumb_set ADC1_2_IRQHandler, halt
-
-.weak USB_HP_CAN1_TX_IRQHandler
-.thumb_set USB_HP_CAN1_TX_IRQHandler, halt
-
-.weak USB_LP_CAN1_RX0_IRQHandler
-.thumb_set USB_LP_CAN1_RX0_IRQHandler, halt
-
-.weak CAN1_RX1_IRQHandler
-.thumb_set CAN1_RX1_IRQHandler, halt
-
-.weak CAN1_SCE_IRQHandler
-.thumb_set CAN1_SCE_IRQHandler, halt
-
-.weak EXTI9_5_IRQHandler
-.thumb_set EXTI9_5_IRQHandler, halt
-
-.weak TIM1_BRK_IRQHandler
-.thumb_set TIM1_BRK_IRQHandler, halt
-
-.weak TIM1_UP_IRQHandler
-.thumb_set TIM1_UP_IRQHandler, halt
-
-.weak TIM1_TRG_COM_IRQHandler
-.thumb_set TIM1_TRG_COM_IRQHandler, halt
-
-.weak TIM1_CC_IRQHandler
-.thumb_set TIM1_CC_IRQHandler, halt
-
-.weak TIM2_IRQHandler
-.thumb_set TIM2_IRQHandler, halt
-
-.weak TIM3_IRQHandler
-.thumb_set TIM3_IRQHandler, halt
-
-.weak TIM4_IRQHandler
-.thumb_set TIM4_IRQHandler, halt
-
-.weak I2C1_EV_IRQHandler
-.thumb_set I2C1_EV_IRQHandler, halt
-
-.weak I2C1_ER_IRQHandler
-.thumb_set I2C1_ER_IRQHandler, halt
-
-.weak I2C2_EV_IRQHandler
-.thumb_set I2C2_EV_IRQHandler, halt
-
-.weak I2C2_ER_IRQHandler
-.thumb_set I2C2_ER_IRQHandler, halt
-
-.weak SPI1_IRQHandler
-.thumb_set SPI1_IRQHandler, halt
-
-.weak SPI2_IRQHandler
-.thumb_set SPI2_IRQHandler, halt
-
-.weak USART1_IRQHandler
-.thumb_set USART1_IRQHandler, halt
-
-.weak USART2_IRQHandler
-.thumb_set USART2_IRQHandler, halt
-
-.weak USART3_IRQHandler
-.thumb_set USART3_IRQHandler, halt
-
-.weak EXTI15_10_IRQHandler
-.thumb_set EXTI15_10_IRQHandler, halt
-
-.weak RTCAlarm_IRQHandler
-.thumb_set RTCAlarm_IRQHandler, halt
-
-.weak USBWakeUp_IRQHandler
-.thumb_set USBWakeUp_IRQHandler, halt
-
.end
+