找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 3804|回复: 2

【嵌入式】搭建一个基于gcc编译器的STM32F10x程序编译环境

[复制链接]
发表于 2017-11-22 12:34:16 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
需要的东西:
1、gcc arm toolchain
2、gnu make
3、notepad++(不喜欢的话你可以选择记事本开发。其实用Office Word也不是不行,但要记得保存为纯文本)
4、STM32F10x的官方头文件声明定义PDF
5、ST-LINK Utility负责完成单片机程序的下载,但你可能需要一个USB接口的ST-LINK来完成此事。

ST-Util下载:https://pan.
bai
du.com/s/11bQ7K
27hhFxzPnFP
ES3cjw
(访问密码:c556)
SHA256:6A200CEAACCBE99B3014F5E61204C40BD550D9E03184BA2988536FAB90D363F3

gcc ARM Toolchain是用于跨平台编译bin的一系列工具,包裹gcc ld objcopy等。我们开发STM32F10x的程序的过程,就是先写好源码,然后用gcc将源码编译为中间文件.o,再用ld把我们的.o链接为elf文件。这elf文件你可以理解为“Linux的exe”。完成链接后,再用objcopy把elf里面的纯代码部分提取出来,也就是纯二进制指令。我们要的是这个纯二进制指令,因为STM32F10x它是单片机,它并不是天生就知道如何识别elf、exe这些复杂的格式的。

为什么gcc不直接把源代码编译为二进制指令呢?这是为了便于模块化编程。当你有多个源码文件的时候,gcc把每个源码文件编译为.o,然后链接器负责把这些多个的源码文件组装到一起,完成互相之间的依赖关系的处理。这也是编译原理的基础。

gcc arm toolchain的下载地址:
https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads


打开链接后你会看到它提供了很多种版本的下载方式。其中Windows 32bit的版本有三个,其中有一个带了个“sha1”的后缀,另一个带了“sha2”的后缀。这个是因为这个exe安装器是带了数字签名的,而sha1和sha2是它的数字签名加密算法。使用数字签名是为了保证你下载它的时候黑客不能轻易往里面植入病毒。你可以按照自己的喜好选择其中一个,然后下载下来安装。

gnu make这玩意儿就是Linux里面常见的makefile脚本执行工具,使用它配置编译过程非常方便。它有Windows版本可以给你用。

gnuwin32make的下载地址:
http://gnuwin32.sourceforge.net/packages/make.htm


把gcc arm toolchain和gnuWin32 make安装好以后我们就可以开始搭建编译环境了。
首先我们假定以后就在D盘上保存我们的源码了。我在D盘建立了stm32_proj文件夹用于存储所有和stm32f10x开发相关的东西。
我们以后就打算用makefile来设置编译过程了。为了让makefile能调用gcc arm toolchain里面的工具,我们需要配置一下环境变量。不过我并不想修改我这个系统的全局的环境变量。所以我在D:\stm32_proj里面创建了一个名为env.bat的新的cmd脚本用于调用gnu arm toolchain里面的工具和make。
  1. @echo off
  2. set TL_PATH=C:\Program Files (x86)\GNU Tools ARM Embedded\6 2017-q2-update\bin\
  3. set GNU_MAKE=C:\Program Files (x86)\GnuWin32\bin
  4. set PATH=%TL_PATH%;%GNU_MAKE%;%PATH%
  5. cmd /K cd /d %~dp0
复制代码
其中的“6 2017-q2-update”是我的gcc arm toolchain的版本,你要换成你自己的版本。执行完这个脚本后你就会看到CMD的窗口了。在这个里面你就可以调用gcc的工具和makefile了。

20171122060513.png

这“症状”就是环境变量配置成功了的标志,也就是这个cmd脚本里面的环境变量是OK的,可以调用各种编译工具了。
接下来我们需要的是STM32F10x的官方头文件定义。

点击这里进去下载stsw-stm32054.zip:
http://www.st.com/en/embedded-software/stsw-stm32054.html


懒得去官网下载stsw-stm32054.zip的话,我这里提供下载。但处于各种各样的原因,请回帖再下载。(所以如果是我就去官网下载了,又不难)
游客,如果您要查看本帖隐藏内容请回复
这玩意儿提供了STM32F10x系列全套的外设的驱动,包括ADC、BKP、CAN、CEC、CRC、DAC、调试工具、DMA、EXTI、FLASH、FSMC、GPIO、I2C、IWDG、电源控制、RCC、实时时钟、SDIO、SPI、计时器、USART、WWDG等。
但它提供的这些外设的驱动写得不咋地,设置一个GPIO针的电平所需的代码就超过了1页,各种程度上都还是自己直接写寄存器比较好。
而为了便于轻松地访问它的寄存器,使用它提供的头文件声明就好。也就是它的stm32f10x.h。
这个stm32f10x.h就在刚才下载的stsw-stm32054.zip里面的STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x目录下。
stm32f10x.h依赖core_cm3.h和system_stm32f10x.h。
core_cm3.h在STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport这里。
我在D:\stm32_proj里面创建了一个叫“common”的目录用来存储每次都可能用到的东西。我在common目录里创建了include目录,然后把刚才提到的stm32f10x.h、core_cm3.h和system_stm32f10x.h都存进去。

这个CMSIS是什么呢?它是Cortex Microcontroller Software Interface Standard,翻译过来是“Cortex单片机软件接口标准”,而“Cortex”的翻译是“皮质”……它应该只是个名字而已。
STM32F10x系列单片机用的是ARM Cortex-M3指令集,支持THUMB,所以自然也是要遵守CMSIS标准的。

根据PDF和CMSIS标准,它的ROM flash的开头部分是一个中断向量表,而且这个中断向量表的第0个项是初始栈顶的值。而STM32F10x根据它的规格,有“低密度”(ROM和RAM都比较小)、“中密度”(ROM和RAM大一些)、“高密度”(ROM和RAM很大)、“超高密度”(RAM和ROM更大……)等不同的规格。这些不同规格的单片机在CMSIS钦定的中断表的后面追加了很多自己特色的中段表项,所以我们还得根据情况来填写这个中断表。

stm32f10x.h这个头文件同时支持多个规格的单片机,但你需要在宏定义里面定义自己的编译目标。以下是它的内容的片段:
  1. /* Uncomment the line below according to the target STM32 device used in your
  2.    application
  3.   */

  4. #if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL)
  5.   /* #define STM32F10X_LD */     /*!< STM32F10X_LD: STM32 Low density devices */
  6.   /* #define STM32F10X_LD_VL */  /*!< STM32F10X_LD_VL: STM32 Low density Value Line devices */  
  7.   /* #define STM32F10X_MD */     /*!< STM32F10X_MD: STM32 Medium density devices */
  8.   /* #define STM32F10X_MD_VL */  /*!< STM32F10X_MD_VL: STM32 Medium density Value Line devices */  
  9.   /* #define STM32F10X_HD */     /*!< STM32F10X_HD: STM32 High density devices */
  10.   /* #define STM32F10X_HD_VL */  /*!< STM32F10X_HD_VL: STM32 High density value line devices */  
  11.   /* #define STM32F10X_XL */     /*!< STM32F10X_XL: STM32 XL-density devices */
  12.   /* #define STM32F10X_CL */     /*!< STM32F10X_CL: STM32 Connectivity line devices */
  13. #endif
  14. /*  Tip: To avoid modifying this file each time you need to switch between these
  15.         devices, you can define the device in your toolchain compiler preprocessor.

  16. - Low-density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers
  17.    where the Flash memory density ranges between 16 and 32 Kbytes.
  18. - Low-density value line devices are STM32F100xx microcontrollers where the Flash
  19.    memory density ranges between 16 and 32 Kbytes.
  20. - Medium-density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers
  21.    where the Flash memory density ranges between 64 and 128 Kbytes.
  22. - Medium-density value line devices are STM32F100xx microcontrollers where the
  23.    Flash memory density ranges between 64 and 128 Kbytes.   
  24. - High-density devices are STM32F101xx and STM32F103xx microcontrollers where
  25.    the Flash memory density ranges between 256 and 512 Kbytes.
  26. - High-density value line devices are STM32F100xx microcontrollers where the
  27.    Flash memory density ranges between 256 and 512 Kbytes.   
  28. - XL-density devices are STM32F101xx and STM32F103xx microcontrollers where
  29.    the Flash memory density ranges between 512 and 1024 Kbytes.
  30. - Connectivity line devices are STM32F105xx and STM32F107xx microcontrollers.
  31.   */

  32. #if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL)
  33. #error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"
  34. #endif
复制代码
我的stm32单片机是STM32F103C8T6,所以根据PDF,我应该定义STM32F10X_MD。

有关中段表的详细内容我们看STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm文件夹里面的几个汇编的文件。
我不想引用这几个汇编文件,我要自己用C造轮子。根据它的汇编的文件的内容我发现:绝大多数中断的处理程序,默认都是死循环。然后它导出了弱符号。也就是说只要你自己实现了同名的中断处理函数,那么链接器就会认你的中断处理函数,用它来取代默认的死循环。
其中第1个中断表项是“重启中断”,事实上它定义了你的整个bin的入口点。

因为中断表必须在整个镜像的开始,所以我们需要想办法让gcc toolchain里面的链接器把中断表放到二进制的最开头的位置。解决办法是借助分段机制,把这种需要固定位置的东西装到特殊的段里面,这样我们就可以让链接器把不同的段按照要求放到不同的位置,再完成各种符号依赖的链接。
所以我在源码里面自己定义了一个段“.isr_vector”用来存储中断表。在中断表的后面,我定义了“.after_vectors”段,用于存放默认中断处理向量的内容:死循环。然后就是.text段了,负责存储源代码。

下面是我写好的startup.c和startup.h,有需要的随便下载。
startup.h (14.83 KB, 下载次数: 3)
startup.c (22.33 KB, 下载次数: 4)

我们暂且把这个startup称作启动器。那么写好启动器后就是重点了:如何写一个示例程序。
我在启动器里面加了一个对void main();的依赖,并且在“重启中断”里面引用了它。顺带一提重启中断的处理函数,我是把它写成了裸函数,并且在里面调用汇编初始化堆和栈了。
也就是说,只要链接了我的启动器,然后再链接你的主程序,main就是入口了。
我的板子其实买的是源地工作室的STM32F103最小开发板,如下图所示:

TB2GTVKqMNlpuFjy0FfXXX3CpXa_!!87224073.jpg
TB22DXNt4tmpuFjSZFqXXbHFpXa_!!87224073.jpg

它这个的GPIO的C13连接了一个LED,我们通过控制这个GPIO口的电平状态来设置灯的亮与灭的状态,从而实现闪灯程序。也就是说只要运行的效果就是它闪灯了,那么就意味着它没问题了。
在stm32f10x.h里面定义了GPIO的寄存器结构定义,以及A、B、C、D、E、F、G共7组GPIO的寄存器的地址。通过向GPIOC->ODR的第13个bit写入1来实现C13高电平,然后向GPIOC->ODR的第13个bit写入0来实现C13低电平。
STM32F10x系列单片机有bit band区域用于让你能更方便地操作单个bit的值。借助它,你可以免去读取数据->修改->写入的麻烦流程,只需要一步写入就可以修改某个地址的单个bit。
它把每32个bit映射为1个bit,我们只需要向bit band里面写入一个uint32_t的1,那么对应的内存地址的某个bit的值就会变成1。同理我们向bit band对应区域写个0,那么对应bit也会变成0。
  1. #include<inttypes.h>
  2. #include"stm32f10x.h"

  3. #define Periph_BB(addr, bit) *(volatile uint32_t*)(PERIPH_BB_BASE + ((uint32_t)(addr) - PERIPH_BASE) * 32 + (bit) * 4)

  4. static void delay(int count)
  5. {
  6.     while(--count)
  7.                 asm("");
  8. }

  9. void main()
  10. {
  11.         RCC->APB2ENR = RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPCEN; // 打开GPIOA和GPIOC
  12.         
  13.         GPIOC->CRH = (GPIOC->CRH & ~(GPIO_CRH_MODE13 | GPIO_CRH_CNF13)) | GPIO_CRH_MODE13_1; // 设置GPIOC13的工作模式:2 MHz,push-pull
  14.         
  15.         while(1)
  16.         {
  17.                 Periph_BB(&GPIOC->ODR, 13) = 1; // 灯灭
  18.                 delay(262571);
  19.                 Periph_BB(&GPIOC->ODR, 13) = 0; // 灯亮
  20.                 delay(0xfff);
  21.         }
  22. }
复制代码
注意delay这个函数它是靠跑空循环来实现延时,而gcc会把它优化掉。所以我用一个“asm("");”来避免它被优化掉。事实证明这是有效的,gcc把delay这个函数内联了,但确实没有去掉空循环。
参考:https://stackoverflow.com/questi ... ut-a-busy-wait-loop
可以在IDA里面看到它真的生成了空循环。
20171122125614.png

接下来是编译过程。为了方便我并没有每次都用那个env.bat去打开控制台窗口然后CD进我的工程。我在工程目录下写了个build.bat用于编译。它会在设置好环境变量后执行make,然后pause,方便看到输出。
  1. GCC_PREFIX ?= arm-none-eabi-

  2. CC = $(GCC_PREFIX)gcc
  3. LD = $(GCC_PREFIX)ld
  4. OBJCOPY = $(GCC_PREFIX)objcopy
  5. CFLAGS=-Wall -Wno-main -mcpu=cortex-m3 -mthumb -Os -I../common/include -DSTM32F10X_MD -DUSE_SWD_JTAG -DRELEASE_BUILD
  6. LDFLAGS=-nostdlib -T link.ld
  7. LDLIBS=

  8. foo.bin: foo.elf
  9.         $(OBJCOPY) -O binary $^ $@

  10. foo.elf: startup.o foo.o
  11.         $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
  12.         
  13. .PHONY:clean
  14. clean:
  15.         del foo foo.o
复制代码
其中-Wall表示开启全部警告,然后-Wno-main表示“就算我main函数写得不清真也请别警告我”。-mcpu指定了CPU类型,-mthumb指定了thumb指令。-Os表示优先优化体积。
-I指定包含目录为之前设置的common目录里的include目录。后面三个宏定义是之前说好的stm32f10x.h头文件要求的定义,用于指定单片机型号。

链接器参数-nostdlib意为无标准库,-T指定了链接器脚本。
链接器脚本负责告诉链接器,不同的段如何排列,以及重定向相关的内存布局信息等。
  1. MEMORY
  2. {
  3.         ROM (rx) :  ORIGIN = 0x08000000, LENGTH = 64K
  4.         RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 20K
  5. }

  6. SECTIONS
  7. {
  8.         .isr_vector : ALIGN(4)
  9.         {
  10.                 *(.isr_vector)
  11.                 *(.after_vectors)
  12.         }

  13.         .text : ALIGN(2)
  14.         {
  15.                 *(.text)
  16.                 *(.text*)
  17.                 *(.rodata)
  18.                 *(.rodata*)
  19.         }
  20.         
  21.         .bss :
  22.         {
  23.                 *(.bss)
  24.                 *(.bss*)
  25.         }
  26. }
复制代码
这样编译得到的foo.bin就是我们需要写入到STM32的ROM里面的东西了。
20171122131944.png

然后用ST-LINK Utility来完成写入操作,就可以启动它看看了。

20171122132317.png

走调试器单步测试,没有问题。与此同时我也看到了它的灯在闪烁了。

20171122132435.png

所以,要点有以下几个:
1、中断表必须放在前面,中断表的结构在PDF里面。
2、链接器脚本要写好,它负责帮你把中断表放在前面。
3、完成链接后,用objcopy提取二进制指令就可以写入了。此时你也得到了你想要的bin。
4、用ST-LINK Utility就可以完成二进制指令的写入,以及stm32f10x等各种单片机的调试了。
5、用IDA可以查看编译器是不是真的乖乖地给你生成了你想要的二进制指令。你需要设置处理器为ARM Little-Endian,版本是ARMv7,其它的随默认。然后内存布局写对就行。

配置好的stm32_proj文件夹与示例程序下载: stm32_proj_foo.zip (6.93 MB, 下载次数: 4)

另外在IDA调试的时候我想让它把前面那个中断表当作一个uing32_t数组来显示,但一个个按D键下来也是十分累人的。后面我找到一个帖子,说只要选中指定区域,然后执行一个python脚本就行。
参考:https://reverseengineering.stack ... to-words-in-ida-pro
这个脚本的内容如下:
  1. ea = SelStart()
  2. end = SelEnd()

  3. print "Making DWORDs from 0x%X - 0x%X" % (ea, end)

  4. MakeUnknown(ea, (end-ea), DOUNK_SIMPLE)

  5. while ea < end:
  6.         MakeDword(ea)
  7.         ea += 4
复制代码
在选择区块的时候要从下往上选,不然IDA会在你鼠标拖了0x40行左右的时候突然给你飞到底,让你全选;而你要是再想往回拖,IDA又给你突然拖到顶让你一个字节也选不上,只有在反应非常敏捷的情况下非常小心翼翼地拖才能准确拖到指定位置……这UI设计该拉出去毙了。。
复制上面那段python代码的时候注意底部的两行是用TAB缩进的。

startup.h的源码:
  1. #ifndef _STM32F10x_STARTUP_
  2. #define _STM32F10x_STARTUP_

  3. #include<inttypes.h>
  4. #include"stm32f10x.h"

  5. #define Stack_Size 0x400
  6. #define Heap_Size 0x200

  7. #define _initial_sp (void*)(SRAM_BASE + Stack_Size)
  8. #define _heap_base (void*)(SRAM_BASE + Stack_Size)
  9. #define _heap_limit (void*)(SRAM_BASE + Stack_Size + Heap_Size)

  10. typedef void(*Handler_t)();

  11. #define Handler void __attribute__((weak, section(".after_vectors")))
  12. #define Def_Handler void __attribute__((weak, alias("Default_Handler")))

  13. Handler Default_Handler();
  14. void Reset_Handler()__attribute__((noreturn, naked, section(".after_vectors")));
  15. Def_Handler NMI_Handler();
  16. Def_Handler HardFault_Handler();
  17. Def_Handler MemManage_Handler();
  18. Def_Handler BusFault_Handler();
  19. Def_Handler UsageFault_Handler();
  20. Def_Handler SVC_Handler();
  21. Def_Handler DebugMon_Handler();
  22. Def_Handler PendSV_Handler();
  23. Def_Handler SysTick_Handler();

  24. #if defined(STM32F10X_LD)

  25. Def_Handler WWDG_IRQHandler();
  26. Def_Handler PVD_IRQHandler();
  27. Def_Handler TAMPER_IRQHandler();
  28. Def_Handler RTC_IRQHandler();
  29. Def_Handler FLASH_IRQHandler();
  30. Def_Handler RCC_IRQHandler();
  31. Def_Handler EXTI0_IRQHandler();
  32. Def_Handler EXTI1_IRQHandler();
  33. Def_Handler EXTI2_IRQHandler();
  34. Def_Handler EXTI3_IRQHandler();
  35. Def_Handler EXTI4_IRQHandler();
  36. Def_Handler DMA1_Channel1_IRQHandler();
  37. Def_Handler DMA1_Channel2_IRQHandler();
  38. Def_Handler DMA1_Channel3_IRQHandler();
  39. Def_Handler DMA1_Channel4_IRQHandler();
  40. Def_Handler DMA1_Channel5_IRQHandler();
  41. Def_Handler DMA1_Channel6_IRQHandler();
  42. Def_Handler DMA1_Channel7_IRQHandler();
  43. Def_Handler ADC1_2_IRQHandler();
  44. Def_Handler USB_HP_CAN1_TX_IRQHandler();
  45. Def_Handler USB_LP_CAN1_RX0_IRQHandler();
  46. Def_Handler CAN1_RX1_IRQHandler();
  47. Def_Handler CAN1_SCE_IRQHandler();
  48. Def_Handler EXTI9_5_IRQHandler();
  49. Def_Handler TIM1_BRK_IRQHandler();
  50. Def_Handler TIM1_UP_IRQHandler();
  51. Def_Handler TIM1_TRG_COM_IRQHandler();
  52. Def_Handler TIM1_CC_IRQHandler();
  53. Def_Handler TIM2_IRQHandler();
  54. Def_Handler TIM3_IRQHandler();
  55. Def_Handler I2C1_EV_IRQHandler();
  56. Def_Handler I2C1_ER_IRQHandler();
  57. Def_Handler SPI1_IRQHandler();
  58. Def_Handler USART1_IRQHandler();
  59. Def_Handler USART2_IRQHandler();
  60. Def_Handler EXTI15_10_IRQHandler();
  61. Def_Handler RTCAlarm_IRQHandler();
  62. Def_Handler USBWakeUp_IRQHandler();

  63. #elif defined(STM32F10X_MD)

  64. Def_Handler WWDG_IRQHandler();
  65. Def_Handler PVD_IRQHandler();
  66. Def_Handler TAMPER_IRQHandler();
  67. Def_Handler RTC_IRQHandler();
  68. Def_Handler FLASH_IRQHandler();
  69. Def_Handler RCC_IRQHandler();
  70. Def_Handler EXTI0_IRQHandler();
  71. Def_Handler EXTI1_IRQHandler();
  72. Def_Handler EXTI2_IRQHandler();
  73. Def_Handler EXTI3_IRQHandler();
  74. Def_Handler EXTI4_IRQHandler();
  75. Def_Handler DMA1_Channel1_IRQHandler();
  76. Def_Handler DMA1_Channel2_IRQHandler();
  77. Def_Handler DMA1_Channel3_IRQHandler();
  78. Def_Handler DMA1_Channel4_IRQHandler();
  79. Def_Handler DMA1_Channel5_IRQHandler();
  80. Def_Handler DMA1_Channel6_IRQHandler();
  81. Def_Handler DMA1_Channel7_IRQHandler();
  82. Def_Handler ADC1_2_IRQHandler();
  83. Def_Handler USB_HP_CAN1_TX_IRQHandler();
  84. Def_Handler USB_LP_CAN1_RX0_IRQHandler();
  85. Def_Handler CAN1_RX1_IRQHandler();
  86. Def_Handler CAN1_SCE_IRQHandler();
  87. Def_Handler EXTI9_5_IRQHandler();
  88. Def_Handler TIM1_BRK_IRQHandler();
  89. Def_Handler TIM1_UP_IRQHandler();
  90. Def_Handler TIM1_TRG_COM_IRQHandler();
  91. Def_Handler TIM1_CC_IRQHandler();
  92. Def_Handler TIM2_IRQHandler();
  93. Def_Handler TIM3_IRQHandler();
  94. Def_Handler TIM4_IRQHandler();
  95. Def_Handler I2C1_EV_IRQHandler();
  96. Def_Handler I2C1_ER_IRQHandler();
  97. Def_Handler I2C2_EV_IRQHandler();
  98. Def_Handler I2C2_ER_IRQHandler();
  99. Def_Handler SPI1_IRQHandler();
  100. Def_Handler SPI2_IRQHandler();
  101. Def_Handler USART1_IRQHandler();
  102. Def_Handler USART2_IRQHandler();
  103. Def_Handler USART3_IRQHandler();
  104. Def_Handler EXTI15_10_IRQHandler();
  105. Def_Handler RTCAlarm_IRQHandler();
  106. Def_Handler USBWakeUp_IRQHandler();

  107. #elif defined(STM32F10X_HD)

  108. Def_Handler WWDG_IRQHandler();
  109. Def_Handler PVD_IRQHandler();
  110. Def_Handler TAMPER_IRQHandler();
  111. Def_Handler RTC_IRQHandler();
  112. Def_Handler FLASH_IRQHandler();
  113. Def_Handler RCC_IRQHandler();
  114. Def_Handler EXTI0_IRQHandler();
  115. Def_Handler EXTI1_IRQHandler();
  116. Def_Handler EXTI2_IRQHandler();
  117. Def_Handler EXTI3_IRQHandler();
  118. Def_Handler EXTI4_IRQHandler();
  119. Def_Handler DMA1_Channel1_IRQHandler();
  120. Def_Handler DMA1_Channel2_IRQHandler();
  121. Def_Handler DMA1_Channel3_IRQHandler();
  122. Def_Handler DMA1_Channel4_IRQHandler();
  123. Def_Handler DMA1_Channel5_IRQHandler();
  124. Def_Handler DMA1_Channel6_IRQHandler();
  125. Def_Handler DMA1_Channel7_IRQHandler();
  126. Def_Handler ADC1_2_IRQHandler();
  127. Def_Handler USB_HP_CAN1_TX_IRQHandler();
  128. Def_Handler USB_LP_CAN1_RX0_IRQHandler();
  129. Def_Handler CAN1_RX1_IRQHandler();
  130. Def_Handler CAN1_SCE_IRQHandler();
  131. Def_Handler EXTI9_5_IRQHandler();
  132. Def_Handler TIM1_BRK_IRQHandler();
  133. Def_Handler TIM1_UP_IRQHandler();
  134. Def_Handler TIM1_TRG_COM_IRQHandler();
  135. Def_Handler TIM1_CC_IRQHandler();
  136. Def_Handler TIM2_IRQHandler();
  137. Def_Handler TIM3_IRQHandler();
  138. Def_Handler TIM4_IRQHandler();
  139. Def_Handler I2C1_EV_IRQHandler();
  140. Def_Handler I2C1_ER_IRQHandler();
  141. Def_Handler I2C2_EV_IRQHandler();
  142. Def_Handler I2C2_ER_IRQHandler();
  143. Def_Handler SPI1_IRQHandler();
  144. Def_Handler SPI2_IRQHandler();
  145. Def_Handler USART1_IRQHandler();
  146. Def_Handler USART2_IRQHandler();
  147. Def_Handler USART3_IRQHandler();
  148. Def_Handler EXTI15_10_IRQHandler();
  149. Def_Handler RTCAlarm_IRQHandler();
  150. Def_Handler USBWakeUp_IRQHandler();
  151. Def_Handler TIM8_BRK_IRQHandler();
  152. Def_Handler TIM8_UP_IRQHandler();
  153. Def_Handler TIM8_TRG_COM_IRQHandler();
  154. Def_Handler TIM8_CC_IRQHandler();
  155. Def_Handler ADC3_IRQHandler();
  156. Def_Handler FSMC_IRQHandler();
  157. Def_Handler SDIO_IRQHandler();
  158. Def_Handler TIM5_IRQHandler();
  159. Def_Handler SPI3_IRQHandler();
  160. Def_Handler UART4_IRQHandler();
  161. Def_Handler UART5_IRQHandler();
  162. Def_Handler TIM6_IRQHandler();
  163. Def_Handler TIM7_IRQHandler();
  164. Def_Handler DMA2_Channel1_IRQHandler();
  165. Def_Handler DMA2_Channel2_IRQHandler();
  166. Def_Handler DMA2_Channel3_IRQHandler();
  167. Def_Handler DMA2_Channel4_5_IRQHandler();

  168. #elif defined(STM32F10X_XL)

  169. Def_Handler WWDG_IRQHandler();
  170. Def_Handler PVD_IRQHandler();
  171. Def_Handler TAMPER_IRQHandler();
  172. Def_Handler RTC_IRQHandler();
  173. Def_Handler FLASH_IRQHandler();
  174. Def_Handler RCC_IRQHandler();
  175. Def_Handler EXTI0_IRQHandler();
  176. Def_Handler EXTI1_IRQHandler();
  177. Def_Handler EXTI2_IRQHandler();
  178. Def_Handler EXTI3_IRQHandler();
  179. Def_Handler EXTI4_IRQHandler();
  180. Def_Handler DMA1_Channel1_IRQHandler();
  181. Def_Handler DMA1_Channel2_IRQHandler();
  182. Def_Handler DMA1_Channel3_IRQHandler();
  183. Def_Handler DMA1_Channel4_IRQHandler();
  184. Def_Handler DMA1_Channel5_IRQHandler();
  185. Def_Handler DMA1_Channel6_IRQHandler();
  186. Def_Handler DMA1_Channel7_IRQHandler();
  187. Def_Handler ADC1_2_IRQHandler();
  188. Def_Handler USB_HP_CAN1_TX_IRQHandler();
  189. Def_Handler USB_LP_CAN1_RX0_IRQHandler();
  190. Def_Handler CAN1_RX1_IRQHandler();
  191. Def_Handler CAN1_SCE_IRQHandler();
  192. Def_Handler EXTI9_5_IRQHandler();
  193. Def_Handler TIM1_BRK_TIM9_IRQHandler();
  194. Def_Handler TIM1_UP_TIM10_IRQHandler();
  195. Def_Handler TIM1_TRG_COM_TIM11_IRQHandler();
  196. Def_Handler TIM1_CC_IRQHandler();
  197. Def_Handler TIM2_IRQHandler();
  198. Def_Handler TIM3_IRQHandler();
  199. Def_Handler TIM4_IRQHandler();
  200. Def_Handler I2C1_EV_IRQHandler();
  201. Def_Handler I2C1_ER_IRQHandler();
  202. Def_Handler I2C2_EV_IRQHandler();
  203. Def_Handler I2C2_ER_IRQHandler();
  204. Def_Handler SPI1_IRQHandler();
  205. Def_Handler SPI2_IRQHandler();
  206. Def_Handler USART1_IRQHandler();
  207. Def_Handler USART2_IRQHandler();
  208. Def_Handler USART3_IRQHandler();
  209. Def_Handler EXTI15_10_IRQHandler();
  210. Def_Handler RTCAlarm_IRQHandler();
  211. Def_Handler USBWakeUp_IRQHandler();
  212. Def_Handler TIM8_BRK_TIM12_IRQHandler();
  213. Def_Handler TIM8_UP_TIM13_IRQHandler();
  214. Def_Handler TIM8_TRG_COM_TIM14_IRQHandler();
  215. Def_Handler TIM8_CC_IRQHandler();
  216. Def_Handler ADC3_IRQHandler();
  217. Def_Handler FSMC_IRQHandler();
  218. Def_Handler SDIO_IRQHandler();
  219. Def_Handler TIM5_IRQHandler();
  220. Def_Handler SPI3_IRQHandler();
  221. Def_Handler UART4_IRQHandler();
  222. Def_Handler UART5_IRQHandler();
  223. Def_Handler TIM6_IRQHandler();
  224. Def_Handler TIM7_IRQHandler();
  225. Def_Handler DMA2_Channel1_IRQHandler();
  226. Def_Handler DMA2_Channel2_IRQHandler();
  227. Def_Handler DMA2_Channel3_IRQHandler();
  228. Def_Handler DMA2_Channel4_5_IRQHandler();

  229. #elif defined(STM32F10X_CL)

  230. Def_Handler WWDG_IRQHandler();
  231. Def_Handler PVD_IRQHandler();
  232. Def_Handler TAMPER_IRQHandler();
  233. Def_Handler RTC_IRQHandler();
  234. Def_Handler FLASH_IRQHandler();
  235. Def_Handler RCC_IRQHandler();
  236. Def_Handler EXTI0_IRQHandler();
  237. Def_Handler EXTI1_IRQHandler();
  238. Def_Handler EXTI2_IRQHandler();
  239. Def_Handler EXTI3_IRQHandler();
  240. Def_Handler EXTI4_IRQHandler();
  241. Def_Handler DMA1_Channel1_IRQHandler();
  242. Def_Handler DMA1_Channel2_IRQHandler();
  243. Def_Handler DMA1_Channel3_IRQHandler();
  244. Def_Handler DMA1_Channel4_IRQHandler();
  245. Def_Handler DMA1_Channel5_IRQHandler();
  246. Def_Handler DMA1_Channel6_IRQHandler();
  247. Def_Handler DMA1_Channel7_IRQHandler();
  248. Def_Handler ADC1_2_IRQHandler();
  249. Def_Handler CAN1_TX_IRQHandler();
  250. Def_Handler CAN1_RX0_IRQHandler();
  251. Def_Handler CAN1_RX1_IRQHandler();
  252. Def_Handler CAN1_SCE_IRQHandler();
  253. Def_Handler EXTI9_5_IRQHandler();
  254. Def_Handler TIM1_BRK_IRQHandler();
  255. Def_Handler TIM1_UP_IRQHandler();
  256. Def_Handler TIM1_TRG_COM_IRQHandler();
  257. Def_Handler TIM1_CC_IRQHandler();
  258. Def_Handler TIM2_IRQHandler();
  259. Def_Handler TIM3_IRQHandler();
  260. Def_Handler TIM4_IRQHandler();
  261. Def_Handler I2C1_EV_IRQHandler();
  262. Def_Handler I2C1_ER_IRQHandler();
  263. Def_Handler I2C2_EV_IRQHandler();
  264. Def_Handler I2C2_ER_IRQHandler();
  265. Def_Handler SPI1_IRQHandler();
  266. Def_Handler SPI2_IRQHandler();
  267. Def_Handler USART1_IRQHandler();
  268. Def_Handler USART2_IRQHandler();
  269. Def_Handler USART3_IRQHandler();
  270. Def_Handler EXTI15_10_IRQHandler();
  271. Def_Handler RTCAlarm_IRQHandler();
  272. Def_Handler OTG_FS_WKUP_IRQHandler();
  273. Def_Handler TIM5_IRQHandler();
  274. Def_Handler SPI3_IRQHandler();
  275. Def_Handler UART4_IRQHandler();
  276. Def_Handler UART5_IRQHandler();
  277. Def_Handler TIM6_IRQHandler();
  278. Def_Handler TIM7_IRQHandler();
  279. Def_Handler DMA2_Channel1_IRQHandler();
  280. Def_Handler DMA2_Channel2_IRQHandler();
  281. Def_Handler DMA2_Channel3_IRQHandler();
  282. Def_Handler DMA2_Channel4_IRQHandler();
  283. Def_Handler DMA2_Channel5_IRQHandler();
  284. Def_Handler ETH_IRQHandler();
  285. Def_Handler ETH_WKUP_IRQHandler();
  286. Def_Handler CAN2_TX_IRQHandler();
  287. Def_Handler CAN2_RX0_IRQHandler();
  288. Def_Handler CAN2_RX1_IRQHandler();
  289. Def_Handler CAN2_SCE_IRQHandler();
  290. Def_Handler OTG_FS_IRQHandler();

  291. #elif defined(STM32F10X_LD_VL)

  292. Def_Handler WWDG_IRQHandler();
  293. Def_Handler PVD_IRQHandler();
  294. Def_Handler TAMPER_IRQHandler();
  295. Def_Handler RTC_IRQHandler();
  296. Def_Handler FLASH_IRQHandler();
  297. Def_Handler RCC_IRQHandler();
  298. Def_Handler EXTI0_IRQHandler();
  299. Def_Handler EXTI1_IRQHandler();
  300. Def_Handler EXTI2_IRQHandler();
  301. Def_Handler EXTI3_IRQHandler();
  302. Def_Handler EXTI4_IRQHandler();
  303. Def_Handler DMA1_Channel1_IRQHandler();
  304. Def_Handler DMA1_Channel2_IRQHandler();
  305. Def_Handler DMA1_Channel3_IRQHandler();
  306. Def_Handler DMA1_Channel4_IRQHandler();
  307. Def_Handler DMA1_Channel5_IRQHandler();
  308. Def_Handler DMA1_Channel6_IRQHandler();
  309. Def_Handler DMA1_Channel7_IRQHandler();
  310. Def_Handler ADC1_IRQHandler();
  311. Def_Handler EXTI9_5_IRQHandler();
  312. Def_Handler TIM1_BRK_TIM15_IRQHandler();
  313. Def_Handler TIM1_UP_TIM16_IRQHandler();
  314. Def_Handler TIM1_TRG_COM_TIM17_IRQHandler();
  315. Def_Handler TIM1_CC_IRQHandler();
  316. Def_Handler TIM2_IRQHandler();
  317. Def_Handler TIM3_IRQHandler();
  318. Def_Handler I2C1_EV_IRQHandler();
  319. Def_Handler I2C1_ER_IRQHandler();
  320. Def_Handler SPI1_IRQHandler();
  321. Def_Handler USART1_IRQHandler();
  322. Def_Handler USART2_IRQHandler();
  323. Def_Handler EXTI15_10_IRQHandler();
  324. Def_Handler RTCAlarm_IRQHandler();
  325. Def_Handler CEC_IRQHandler();
  326. Def_Handler TIM6_DAC_IRQHandler();
  327. Def_Handler TIM7_IRQHandler();

  328. #elif defined(STM32F10X_MD_VL)

  329. Def_Handler WWDG_IRQHandler();
  330. Def_Handler PVD_IRQHandler();
  331. Def_Handler TAMPER_IRQHandler();
  332. Def_Handler RTC_IRQHandler();
  333. Def_Handler FLASH_IRQHandler();
  334. Def_Handler RCC_IRQHandler();
  335. Def_Handler EXTI0_IRQHandler();
  336. Def_Handler EXTI1_IRQHandler();
  337. Def_Handler EXTI2_IRQHandler();
  338. Def_Handler EXTI3_IRQHandler();
  339. Def_Handler EXTI4_IRQHandler();
  340. Def_Handler DMA1_Channel1_IRQHandler();
  341. Def_Handler DMA1_Channel2_IRQHandler();
  342. Def_Handler DMA1_Channel3_IRQHandler();
  343. Def_Handler DMA1_Channel4_IRQHandler();
  344. Def_Handler DMA1_Channel5_IRQHandler();
  345. Def_Handler DMA1_Channel6_IRQHandler();
  346. Def_Handler DMA1_Channel7_IRQHandler();
  347. Def_Handler ADC1_IRQHandler();
  348. Def_Handler EXTI9_5_IRQHandler();
  349. Def_Handler TIM1_BRK_TIM15_IRQHandler();
  350. Def_Handler TIM1_UP_TIM16_IRQHandler();
  351. Def_Handler TIM1_TRG_COM_TIM17_IRQHandler();
  352. Def_Handler TIM1_CC_IRQHandler();
  353. Def_Handler TIM2_IRQHandler();
  354. Def_Handler TIM3_IRQHandler();
  355. Def_Handler TIM4_IRQHandler();
  356. Def_Handler I2C1_EV_IRQHandler();
  357. Def_Handler I2C1_ER_IRQHandler();
  358. Def_Handler I2C2_EV_IRQHandler();
  359. Def_Handler I2C2_ER_IRQHandler();
  360. Def_Handler SPI1_IRQHandler();
  361. Def_Handler SPI2_IRQHandler();
  362. Def_Handler USART1_IRQHandler();
  363. Def_Handler USART2_IRQHandler();
  364. Def_Handler USART3_IRQHandler();
  365. Def_Handler EXTI15_10_IRQHandler();
  366. Def_Handler RTCAlarm_IRQHandler();
  367. Def_Handler CEC_IRQHandler();
  368. Def_Handler TIM6_DAC_IRQHandler();
  369. Def_Handler TIM7_IRQHandler();

  370. #elif defined(STM32F10X_HD_VL)

  371. Def_Handler WWDG_IRQHandler();
  372. Def_Handler PVD_IRQHandler();
  373. Def_Handler TAMPER_IRQHandler();
  374. Def_Handler RTC_IRQHandler();
  375. Def_Handler FLASH_IRQHandler();
  376. Def_Handler RCC_IRQHandler();
  377. Def_Handler EXTI0_IRQHandler();
  378. Def_Handler EXTI1_IRQHandler();
  379. Def_Handler EXTI2_IRQHandler();
  380. Def_Handler EXTI3_IRQHandler();
  381. Def_Handler EXTI4_IRQHandler();
  382. Def_Handler DMA1_Channel1_IRQHandler();
  383. Def_Handler DMA1_Channel2_IRQHandler();
  384. Def_Handler DMA1_Channel3_IRQHandler();
  385. Def_Handler DMA1_Channel4_IRQHandler();
  386. Def_Handler DMA1_Channel5_IRQHandler();
  387. Def_Handler DMA1_Channel6_IRQHandler();
  388. Def_Handler DMA1_Channel7_IRQHandler();
  389. Def_Handler ADC1_IRQHandler();
  390. Def_Handler EXTI9_5_IRQHandler();
  391. Def_Handler TIM1_BRK_TIM15_IRQHandler();
  392. Def_Handler TIM1_UP_TIM16_IRQHandler();
  393. Def_Handler TIM1_TRG_COM_TIM17_IRQHandler();
  394. Def_Handler TIM1_CC_IRQHandler();
  395. Def_Handler TIM2_IRQHandler();
  396. Def_Handler TIM3_IRQHandler();
  397. Def_Handler TIM4_IRQHandler();
  398. Def_Handler I2C1_EV_IRQHandler();
  399. Def_Handler I2C1_ER_IRQHandler();
  400. Def_Handler I2C2_EV_IRQHandler();
  401. Def_Handler I2C2_ER_IRQHandler();
  402. Def_Handler SPI1_IRQHandler();
  403. Def_Handler SPI2_IRQHandler();
  404. Def_Handler USART1_IRQHandler();
  405. Def_Handler USART2_IRQHandler();
  406. Def_Handler USART3_IRQHandler();
  407. Def_Handler EXTI15_10_IRQHandler();
  408. Def_Handler RTCAlarm_IRQHandler();
  409. Def_Handler CEC_IRQHandler();
  410. Def_Handler TIM12_IRQHandler();
  411. Def_Handler TIM13_IRQHandler();
  412. Def_Handler TIM14_IRQHandler();
  413. Def_Handler TIM5_IRQHandler();
  414. Def_Handler SPI3_IRQHandler();
  415. Def_Handler UART4_IRQHandler();
  416. Def_Handler UART5_IRQHandler();
  417. Def_Handler TIM6_DAC_IRQHandler();
  418. Def_Handler TIM7_IRQHandler();
  419. Def_Handler DMA2_Channel1_IRQHandler();
  420. Def_Handler DMA2_Channel2_IRQHandler();
  421. Def_Handler DMA2_Channel3_IRQHandler();
  422. Def_Handler DMA2_Channel4_5_IRQHandler();
  423. Def_Handler DMA2_Channel5_IRQHandler();

  424. #else
  425. #error "missing vectors"
  426. #endif

  427. #endif
复制代码
startup.c的源码:
  1. #include"startup.h"

  2. extern void main();

  3. __attribute__((section(".isr_vector"), used))
  4. Handler_t __Vectors[] =
  5. {
  6.         (Handler_t)_initial_sp,     // Top of Stack
  7.         Reset_Handler,              // Reset Handler
  8.         NMI_Handler,                // NMI Handler
  9.         HardFault_Handler,          // Hard Fault Handler
  10.         MemManage_Handler,          // MPU Fault Handler
  11.         BusFault_Handler,           // Bus Fault Handler
  12.         UsageFault_Handler,         // Usage Fault Handler
  13.         0,                          // Reserved
  14.         0,                          // Reserved
  15.         0,                          // Reserved
  16.         0,                          // Reserved
  17.         SVC_Handler,                // SVCall Handler
  18.         DebugMon_Handler,           // Debug Monitor Handler
  19.         0,                          // Reserved
  20.         PendSV_Handler,             // PendSV Handler
  21.         SysTick_Handler,            // SysTick Handler

  22. #if defined(STM32F10X_LD)
  23.         WWDG_IRQHandler,            // Window Watchdog
  24.         PVD_IRQHandler,             // PVD through EXTI Line detect
  25.         TAMPER_IRQHandler,          // Tamper
  26.         RTC_IRQHandler,             // RTC
  27.         FLASH_IRQHandler,           // Flash
  28.         RCC_IRQHandler,             // RCC
  29.         EXTI0_IRQHandler,           // EXTI Line 0
  30.         EXTI1_IRQHandler,           // EXTI Line 1
  31.         EXTI2_IRQHandler,           // EXTI Line 2
  32.         EXTI3_IRQHandler,           // EXTI Line 3
  33.         EXTI4_IRQHandler,           // EXTI Line 4
  34.         DMA1_Channel1_IRQHandler,   // DMA1 Channel 1
  35.         DMA1_Channel2_IRQHandler,   // DMA1 Channel 2
  36.         DMA1_Channel3_IRQHandler,   // DMA1 Channel 3
  37.         DMA1_Channel4_IRQHandler,   // DMA1 Channel 4
  38.         DMA1_Channel5_IRQHandler,   // DMA1 Channel 5
  39.         DMA1_Channel6_IRQHandler,   // DMA1 Channel 6
  40.         DMA1_Channel7_IRQHandler,   // DMA1 Channel 7
  41.         ADC1_2_IRQHandler,          // ADC1_2
  42.         USB_HP_CAN1_TX_IRQHandler,  // USB High Priority or CAN1 TX
  43.         USB_LP_CAN1_RX0_IRQHandler, // USB Low  Priority or CAN1 RX0
  44.         CAN1_RX1_IRQHandler,        // CAN1 RX1
  45.         CAN1_SCE_IRQHandler,        // CAN1 SCE
  46.         EXTI9_5_IRQHandler,         // EXTI Line 9..5
  47.         TIM1_BRK_IRQHandler,        // TIM1 Break
  48.         TIM1_UP_IRQHandler,         // TIM1 Update
  49.         TIM1_TRG_COM_IRQHandler,    // TIM1 Trigger and Commutation
  50.         TIM1_CC_IRQHandler,         // TIM1 Capture Compare
  51.         TIM2_IRQHandler,            // TIM2
  52.         TIM3_IRQHandler,            // TIM3
  53.         0,                          // Reserved
  54.         I2C1_EV_IRQHandler,         // I2C1 Event
  55.         I2C1_ER_IRQHandler,         // I2C1 Error
  56.         0,                          // Reserved
  57.         0,                          // Reserved
  58.         SPI1_IRQHandler,            // SPI1
  59.         0,                          // Reserved
  60.         USART1_IRQHandler,          // USART1
  61.         USART2_IRQHandler,          // USART2
  62.         0,                          // Reserved
  63.         EXTI15_10_IRQHandler,       // EXTI Line 15..10
  64.         RTCAlarm_IRQHandler,        // RTC Alarm through EXTI Line
  65.         USBWakeUp_IRQHandler,       // USB Wakeup from suspend

  66. #elif defined(STM32F10X_MD)

  67.         WWDG_IRQHandler,            // Window Watchdog
  68.         PVD_IRQHandler,             // PVD through EXTI Line detect
  69.         TAMPER_IRQHandler,          // Tamper
  70.         RTC_IRQHandler,             // RTC
  71.         FLASH_IRQHandler,           // Flash
  72.         RCC_IRQHandler,             // RCC
  73.         EXTI0_IRQHandler,           // EXTI Line 0
  74.         EXTI1_IRQHandler,           // EXTI Line 1
  75.         EXTI2_IRQHandler,           // EXTI Line 2
  76.         EXTI3_IRQHandler,           // EXTI Line 3
  77.         EXTI4_IRQHandler,           // EXTI Line 4
  78.         DMA1_Channel1_IRQHandler,   // DMA1 Channel 1
  79.         DMA1_Channel2_IRQHandler,   // DMA1 Channel 2
  80.         DMA1_Channel3_IRQHandler,   // DMA1 Channel 3
  81.         DMA1_Channel4_IRQHandler,   // DMA1 Channel 4
  82.         DMA1_Channel5_IRQHandler,   // DMA1 Channel 5
  83.         DMA1_Channel6_IRQHandler,   // DMA1 Channel 6
  84.         DMA1_Channel7_IRQHandler,   // DMA1 Channel 7
  85.         ADC1_2_IRQHandler,          // ADC1_2
  86.         USB_HP_CAN1_TX_IRQHandler,  // USB High Priority or CAN1 TX
  87.         USB_LP_CAN1_RX0_IRQHandler, // USB Low  Priority or CAN1 RX0
  88.         CAN1_RX1_IRQHandler,        // CAN1 RX1
  89.         CAN1_SCE_IRQHandler,        // CAN1 SCE
  90.         EXTI9_5_IRQHandler,         // EXTI Line 9..5
  91.         TIM1_BRK_IRQHandler,        // TIM1 Break
  92.         TIM1_UP_IRQHandler,         // TIM1 Update
  93.         TIM1_TRG_COM_IRQHandler,    // TIM1 Trigger and Commutation
  94.         TIM1_CC_IRQHandler,         // TIM1 Capture Compare
  95.         TIM2_IRQHandler,            // TIM2
  96.         TIM3_IRQHandler,            // TIM3
  97.         TIM4_IRQHandler,            // TIM4
  98.         I2C1_EV_IRQHandler,         // I2C1 Event
  99.         I2C1_ER_IRQHandler,         // I2C1 Error
  100.         I2C2_EV_IRQHandler,         // I2C2 Event
  101.         I2C2_ER_IRQHandler,         // I2C2 Error
  102.         SPI1_IRQHandler,            // SPI1
  103.         SPI2_IRQHandler,            // SPI2
  104.         USART1_IRQHandler,          // USART1
  105.         USART2_IRQHandler,          // USART2
  106.         USART3_IRQHandler,          // USART3
  107.         EXTI15_10_IRQHandler,       // EXTI Line 15..10
  108.         RTCAlarm_IRQHandler,        // RTC Alarm through EXTI Line
  109.         USBWakeUp_IRQHandler,       // USB Wakeup from suspend

  110. #elif defined(STM32F10X_HD)

  111.         WWDG_IRQHandler,            // Window Watchdog
  112.         PVD_IRQHandler,             // PVD through EXTI Line detect
  113.         TAMPER_IRQHandler,          // Tamper
  114.         RTC_IRQHandler,             // RTC
  115.         FLASH_IRQHandler,           // Flash
  116.         RCC_IRQHandler,             // RCC
  117.         EXTI0_IRQHandler,           // EXTI Line 0
  118.         EXTI1_IRQHandler,           // EXTI Line 1
  119.         EXTI2_IRQHandler,           // EXTI Line 2
  120.         EXTI3_IRQHandler,           // EXTI Line 3
  121.         EXTI4_IRQHandler,           // EXTI Line 4
  122.         DMA1_Channel1_IRQHandler,   // DMA1 Channel 1
  123.         DMA1_Channel2_IRQHandler,   // DMA1 Channel 2
  124.         DMA1_Channel3_IRQHandler,   // DMA1 Channel 3
  125.         DMA1_Channel4_IRQHandler,   // DMA1 Channel 4
  126.         DMA1_Channel5_IRQHandler,   // DMA1 Channel 5
  127.         DMA1_Channel6_IRQHandler,   // DMA1 Channel 6
  128.         DMA1_Channel7_IRQHandler,   // DMA1 Channel 7
  129.         ADC1_2_IRQHandler,          // ADC1 & ADC2
  130.         USB_HP_CAN1_TX_IRQHandler,  // USB High Priority or CAN1 TX
  131.         USB_LP_CAN1_RX0_IRQHandler, // USB Low  Priority or CAN1 RX0
  132.         CAN1_RX1_IRQHandler,        // CAN1 RX1
  133.         CAN1_SCE_IRQHandler,        // CAN1 SCE
  134.         EXTI9_5_IRQHandler,         // EXTI Line 9..5
  135.         TIM1_BRK_IRQHandler,        // TIM1 Break
  136.         TIM1_UP_IRQHandler,         // TIM1 Update
  137.         TIM1_TRG_COM_IRQHandler,    // TIM1 Trigger and Commutation
  138.         TIM1_CC_IRQHandler,         // TIM1 Capture Compare
  139.         TIM2_IRQHandler,            // TIM2
  140.         TIM3_IRQHandler,            // TIM3
  141.         TIM4_IRQHandler,            // TIM4
  142.         I2C1_EV_IRQHandler,         // I2C1 Event
  143.         I2C1_ER_IRQHandler,         // I2C1 Error
  144.         I2C2_EV_IRQHandler,         // I2C2 Event
  145.         I2C2_ER_IRQHandler,         // I2C2 Error
  146.         SPI1_IRQHandler,            // SPI1
  147.         SPI2_IRQHandler,            // SPI2
  148.         USART1_IRQHandler,          // USART1
  149.         USART2_IRQHandler,          // USART2
  150.         USART3_IRQHandler,          // USART3
  151.         EXTI15_10_IRQHandler,       // EXTI Line 15..10
  152.         RTCAlarm_IRQHandler,        // RTC Alarm through EXTI Line
  153.         USBWakeUp_IRQHandler,       // USB Wakeup from suspend
  154.         TIM8_BRK_IRQHandler,        // TIM8 Break
  155.         TIM8_UP_IRQHandler,         // TIM8 Update
  156.         TIM8_TRG_COM_IRQHandler,    // TIM8 Trigger and Commutation
  157.         TIM8_CC_IRQHandler,         // TIM8 Capture Compare
  158.         ADC3_IRQHandler,            // ADC3
  159.         FSMC_IRQHandler,            // FSMC
  160.         SDIO_IRQHandler,            // SDIO
  161.         TIM5_IRQHandler,            // TIM5
  162.         SPI3_IRQHandler,            // SPI3
  163.         UART4_IRQHandler,           // UART4
  164.         UART5_IRQHandler,           // UART5
  165.         TIM6_IRQHandler,            // TIM6
  166.         TIM7_IRQHandler,            // TIM7
  167.         DMA2_Channel1_IRQHandler,   // DMA2 Channel1
  168.         DMA2_Channel2_IRQHandler,   // DMA2 Channel2
  169.         DMA2_Channel3_IRQHandler,   // DMA2 Channel3
  170.         DMA2_Channel4_5_IRQHandler, // DMA2 Channel4 & Channel5

  171. #elif defined(STM32F10X_XL)

  172.         WWDG_IRQHandler,                // Window Watchdog
  173.         PVD_IRQHandler,                 // PVD through EXTI Line detect
  174.         TAMPER_IRQHandler,              // Tamper
  175.         RTC_IRQHandler,                 // RTC
  176.         FLASH_IRQHandler,               // Flash
  177.         RCC_IRQHandler,                 // RCC
  178.         EXTI0_IRQHandler,               // EXTI Line 0
  179.         EXTI1_IRQHandler,               // EXTI Line 1
  180.         EXTI2_IRQHandler,               // EXTI Line 2
  181.         EXTI3_IRQHandler,               // EXTI Line 3
  182.         EXTI4_IRQHandler,               // EXTI Line 4
  183.         DMA1_Channel1_IRQHandler,       // DMA1 Channel 1
  184.         DMA1_Channel2_IRQHandler,       // DMA1 Channel 2
  185.         DMA1_Channel3_IRQHandler,       // DMA1 Channel 3
  186.         DMA1_Channel4_IRQHandler,       // DMA1 Channel 4
  187.         DMA1_Channel5_IRQHandler,       // DMA1 Channel 5
  188.         DMA1_Channel6_IRQHandler,       // DMA1 Channel 6
  189.         DMA1_Channel7_IRQHandler,       // DMA1 Channel 7
  190.         ADC1_2_IRQHandler,              // ADC1 & ADC2
  191.         USB_HP_CAN1_TX_IRQHandler,      // USB High Priority or CAN1 TX
  192.         USB_LP_CAN1_RX0_IRQHandler,     // USB Low  Priority or CAN1 RX0
  193.         CAN1_RX1_IRQHandler,            // CAN1 RX1
  194.         CAN1_SCE_IRQHandler,            // CAN1 SCE
  195.         EXTI9_5_IRQHandler,             // EXTI Line 9..5
  196.         TIM1_BRK_TIM9_IRQHandler,       // TIM1 Break and TIM9
  197.         TIM1_UP_TIM10_IRQHandler,       // TIM1 Update and TIM10
  198.         TIM1_TRG_COM_TIM11_IRQHandler,  // TIM1 Trigger and Commutation and TIM11
  199.         TIM1_CC_IRQHandler,             // TIM1 Capture Compare
  200.         TIM2_IRQHandler,                // TIM2
  201.         TIM3_IRQHandler,                // TIM3
  202.         TIM4_IRQHandler,                // TIM4
  203.         I2C1_EV_IRQHandler,             // I2C1 Event
  204.         I2C1_ER_IRQHandler,             // I2C1 Error
  205.         I2C2_EV_IRQHandler,             // I2C2 Event
  206.         I2C2_ER_IRQHandler,             // I2C2 Error
  207.         SPI1_IRQHandler,                // SPI1
  208.         SPI2_IRQHandler,                // SPI2
  209.         USART1_IRQHandler,              // USART1
  210.         USART2_IRQHandler,              // USART2
  211.         USART3_IRQHandler,              // USART3
  212.         EXTI15_10_IRQHandler,           // EXTI Line 15..10
  213.         RTCAlarm_IRQHandler,            // RTC Alarm through EXTI Line
  214.         USBWakeUp_IRQHandler,           // USB Wakeup from suspend
  215.         TIM8_BRK_TIM12_IRQHandler,      // TIM8 Break and TIM12
  216.         TIM8_UP_TIM13_IRQHandler,       // TIM8 Update and TIM13
  217.         TIM8_TRG_COM_TIM14_IRQHandler,  // TIM8 Trigger and Commutation and TIM14
  218.         TIM8_CC_IRQHandler,             // TIM8 Capture Compare
  219.         ADC3_IRQHandler,                // ADC3
  220.         FSMC_IRQHandler,                // FSMC
  221.         SDIO_IRQHandler,                // SDIO
  222.         TIM5_IRQHandler,                // TIM5
  223.         SPI3_IRQHandler,                // SPI3
  224.         UART4_IRQHandler,               // UART4
  225.         UART5_IRQHandler,               // UART5
  226.         TIM6_IRQHandler,                // TIM6
  227.         TIM7_IRQHandler,                // TIM7
  228.         DMA2_Channel1_IRQHandler,       // DMA2 Channel1
  229.         DMA2_Channel2_IRQHandler,       // DMA2 Channel2
  230.         DMA2_Channel3_IRQHandler,       // DMA2 Channel3
  231.         DMA2_Channel4_5_IRQHandler,     // DMA2 Channel4 & Channel5

  232. #elif defined(STM32F10X_CL)

  233.         WWDG_IRQHandler,                // Window Watchdog
  234.         PVD_IRQHandler,                 // PVD through EXTI Line detect
  235.         TAMPER_IRQHandler,              // Tamper
  236.         RTC_IRQHandler,                 // RTC
  237.         FLASH_IRQHandler,               // Flash
  238.         RCC_IRQHandler,                 // RCC
  239.         EXTI0_IRQHandler,               // EXTI Line 0
  240.         EXTI1_IRQHandler,               // EXTI Line 1
  241.         EXTI2_IRQHandler,               // EXTI Line 2
  242.         EXTI3_IRQHandler,               // EXTI Line 3
  243.         EXTI4_IRQHandler,               // EXTI Line 4
  244.         DMA1_Channel1_IRQHandler,       // DMA1 Channel 1
  245.         DMA1_Channel2_IRQHandler,       // DMA1 Channel 2
  246.         DMA1_Channel3_IRQHandler,       // DMA1 Channel 3
  247.         DMA1_Channel4_IRQHandler,       // DMA1 Channel 4
  248.         DMA1_Channel5_IRQHandler,       // DMA1 Channel 5
  249.         DMA1_Channel6_IRQHandler,       // DMA1 Channel 6
  250.         DMA1_Channel7_IRQHandler,       // DMA1 Channel 7
  251.         ADC1_2_IRQHandler,              // ADC1 and ADC2
  252.         CAN1_TX_IRQHandler,             // CAN1 TX
  253.         CAN1_RX0_IRQHandler,            // CAN1 RX0
  254.         CAN1_RX1_IRQHandler,            // CAN1 RX1
  255.         CAN1_SCE_IRQHandler,            // CAN1 SCE
  256.         EXTI9_5_IRQHandler,             // EXTI Line 9..5
  257.         TIM1_BRK_IRQHandler,            // TIM1 Break
  258.         TIM1_UP_IRQHandler,             // TIM1 Update
  259.         TIM1_TRG_COM_IRQHandler,        // TIM1 Trigger and Commutation
  260.         TIM1_CC_IRQHandler,             // TIM1 Capture Compare
  261.         TIM2_IRQHandler,                // TIM2
  262.         TIM3_IRQHandler,                // TIM3
  263.         TIM4_IRQHandler,                // TIM4
  264.         I2C1_EV_IRQHandler,             // I2C1 Event
  265.         I2C1_ER_IRQHandler,             // I2C1 Error
  266.         I2C2_EV_IRQHandler,             // I2C2 Event
  267.         I2C2_ER_IRQHandler,             // I2C1 Error
  268.         SPI1_IRQHandler,                // SPI1
  269.         SPI2_IRQHandler,                // SPI2
  270.         USART1_IRQHandler,              // USART1
  271.         USART2_IRQHandler,              // USART2
  272.         USART3_IRQHandler,              // USART3
  273.         EXTI15_10_IRQHandler,           // EXTI Line 15..10
  274.         RTCAlarm_IRQHandler,            // RTC alarm through EXTI line
  275.         OTG_FS_WKUP_IRQHandler,         // USB OTG FS Wakeup through EXTI line
  276.         0,                              // Reserved
  277.         0,                              // Reserved
  278.         0,                              // Reserved
  279.         0,                              // Reserved
  280.         0,                              // Reserved
  281.         0,                              // Reserved
  282.         0,                              // Reserved
  283.         TIM5_IRQHandler,                // TIM5
  284.         SPI3_IRQHandler,                // SPI3
  285.         UART4_IRQHandler,               // UART4
  286.         UART5_IRQHandler,               // UART5
  287.         TIM6_IRQHandler,                // TIM6
  288.         TIM7_IRQHandler,                // TIM7
  289.         DMA2_Channel1_IRQHandler,       // DMA2 Channel1
  290.         DMA2_Channel2_IRQHandler,       // DMA2 Channel2
  291.         DMA2_Channel3_IRQHandler,       // DMA2 Channel3
  292.         DMA2_Channel4_IRQHandler,       // DMA2 Channel4
  293.         DMA2_Channel5_IRQHandler,       // DMA2 Channel5
  294.         ETH_IRQHandler,                 // Ethernet
  295.         ETH_WKUP_IRQHandler,            // Ethernet Wakeup through EXTI line
  296.         CAN2_TX_IRQHandler,             // CAN2 TX
  297.         CAN2_RX0_IRQHandler,            // CAN2 RX0
  298.         CAN2_RX1_IRQHandler,            // CAN2 RX1
  299.         CAN2_SCE_IRQHandler,            // CAN2 SCE
  300.         OTG_FS_IRQHandler,              // USB OTG FS

  301. #elif defined(STM32F10X_LD_VL)

  302.         WWDG_IRQHandler,                // Window Watchdog
  303.         PVD_IRQHandler,                 // PVD through EXTI Line detect
  304.         TAMPER_IRQHandler,              // Tamper
  305.         RTC_IRQHandler,                 // RTC
  306.         FLASH_IRQHandler,               // Flash
  307.         RCC_IRQHandler,                 // RCC
  308.         EXTI0_IRQHandler,               // EXTI Line 0
  309.         EXTI1_IRQHandler,               // EXTI Line 1
  310.         EXTI2_IRQHandler,               // EXTI Line 2
  311.         EXTI3_IRQHandler,               // EXTI Line 3
  312.         EXTI4_IRQHandler,               // EXTI Line 4
  313.         DMA1_Channel1_IRQHandler,       // DMA1 Channel 1
  314.         DMA1_Channel2_IRQHandler,       // DMA1 Channel 2
  315.         DMA1_Channel3_IRQHandler,       // DMA1 Channel 3
  316.         DMA1_Channel4_IRQHandler,       // DMA1 Channel 4
  317.         DMA1_Channel5_IRQHandler,       // DMA1 Channel 5
  318.         DMA1_Channel6_IRQHandler,       // DMA1 Channel 6
  319.         DMA1_Channel7_IRQHandler,       // DMA1 Channel 7
  320.         ADC1_IRQHandler,                // ADC1
  321.         0,                              // Reserved
  322.         0,                              // Reserved
  323.         0,                              // Reserved
  324.         0,                              // Reserved
  325.         EXTI9_5_IRQHandler,             // EXTI Line 9..5
  326.         TIM1_BRK_TIM15_IRQHandler,      // TIM1 Break and TIM15
  327.         TIM1_UP_TIM16_IRQHandler,       // TIM1 Update and TIM16
  328.         TIM1_TRG_COM_TIM17_IRQHandler,  // TIM1 Trigger and Commutation and TIM17
  329.         TIM1_CC_IRQHandler,             // TIM1 Capture Compare
  330.         TIM2_IRQHandler,                // TIM2
  331.         TIM3_IRQHandler,                // TIM3
  332.         0,                              // Reserved
  333.         I2C1_EV_IRQHandler,             // I2C1 Event
  334.         I2C1_ER_IRQHandler,             // I2C1 Error
  335.         0,                              // Reserved
  336.         0,                              // Reserved
  337.         SPI1_IRQHandler,                // SPI1
  338.         0,                              // Reserved
  339.         USART1_IRQHandler,              // USART1
  340.         USART2_IRQHandler,              // USART2
  341.         0,                              // Reserved
  342.         EXTI15_10_IRQHandler,           // EXTI Line 15..10
  343.         RTCAlarm_IRQHandler,            // RTC Alarm through EXTI Line
  344.         CEC_IRQHandler,                 // HDMI-CEC
  345.         0,                              // Reserved
  346.         0,                              // Reserved
  347.         0,                              // Reserved
  348.         0,                              // Reserved
  349.         0,                              // Reserved
  350.         0,                              // Reserved
  351.         0,                              // Reserved
  352.         0,                              // Reserved
  353.         0,                              // Reserved
  354.         0,                              // Reserved
  355.         0,                              // Reserved
  356.         TIM6_DAC_IRQHandler,            // TIM6 and DAC underrun
  357.         TIM7_IRQHandler,                // TIM7

  358. #elif defined(STM32F10X_MD_VL)

  359.         WWDG_IRQHandler,                // Window Watchdog
  360.         PVD_IRQHandler,                 // PVD through EXTI Line detect
  361.         TAMPER_IRQHandler,              // Tamper
  362.         RTC_IRQHandler,                 // RTC
  363.         FLASH_IRQHandler,               // Flash
  364.         RCC_IRQHandler,                 // RCC
  365.         EXTI0_IRQHandler,               // EXTI Line 0
  366.         EXTI1_IRQHandler,               // EXTI Line 1
  367.         EXTI2_IRQHandler,               // EXTI Line 2
  368.         EXTI3_IRQHandler,               // EXTI Line 3
  369.         EXTI4_IRQHandler,               // EXTI Line 4
  370.         DMA1_Channel1_IRQHandler,       // DMA1 Channel 1
  371.         DMA1_Channel2_IRQHandler,       // DMA1 Channel 2
  372.         DMA1_Channel3_IRQHandler,       // DMA1 Channel 3
  373.         DMA1_Channel4_IRQHandler,       // DMA1 Channel 4
  374.         DMA1_Channel5_IRQHandler,       // DMA1 Channel 5
  375.         DMA1_Channel6_IRQHandler,       // DMA1 Channel 6
  376.         DMA1_Channel7_IRQHandler,       // DMA1 Channel 7
  377.         ADC1_IRQHandler,                // ADC1
  378.         0,                              // Reserved
  379.         0,                              // Reserved
  380.         0,                              // Reserved
  381.         0,                              // Reserved
  382.         EXTI9_5_IRQHandler,             // EXTI Line 9..5
  383.         TIM1_BRK_TIM15_IRQHandler,      // TIM1 Break and TIM15
  384.         TIM1_UP_TIM16_IRQHandler,       // TIM1 Update and TIM16
  385.         TIM1_TRG_COM_TIM17_IRQHandler,  // TIM1 Trigger and Commutation and TIM17
  386.         TIM1_CC_IRQHandler,             // TIM1 Capture Compare
  387.         TIM2_IRQHandler,                // TIM2
  388.         TIM3_IRQHandler,                // TIM3
  389.         TIM4_IRQHandler,                // TIM4
  390.         I2C1_EV_IRQHandler,             // I2C1 Event
  391.         I2C1_ER_IRQHandler,             // I2C1 Error
  392.         I2C2_EV_IRQHandler,             // I2C2 Event
  393.         I2C2_ER_IRQHandler,             // I2C2 Error
  394.         SPI1_IRQHandler,                // SPI1
  395.         SPI2_IRQHandler,                // SPI2
  396.         USART1_IRQHandler,              // USART1
  397.         USART2_IRQHandler,              // USART2
  398.         USART3_IRQHandler,              // USART3
  399.         EXTI15_10_IRQHandler,           // EXTI Line 15..10
  400.         RTCAlarm_IRQHandler,            // RTC Alarm through EXTI Line
  401.         CEC_IRQHandler,                 // HDMI-CEC
  402.         0,                              // Reserved
  403.         0,                              // Reserved
  404.         0,                              // Reserved
  405.         0,                              // Reserved
  406.         0,                              // Reserved
  407.         0,                              // Reserved
  408.         0,                              // Reserved
  409.         0,                              // Reserved
  410.         0,                              // Reserved
  411.         0,                              // Reserved
  412.         0,                              // Reserved
  413.         TIM6_DAC_IRQHandler,            // TIM6 and DAC underrun
  414.         TIM7_IRQHandler,                // TIM7

  415. #elif defined(STM32F10X_HD_VL)

  416.         WWDG_IRQHandler,                // Window Watchdog
  417.         PVD_IRQHandler,                 // PVD through EXTI Line detect
  418.         TAMPER_IRQHandler,              // Tamper
  419.         RTC_IRQHandler,                 // RTC
  420.         FLASH_IRQHandler,               // Flash
  421.         RCC_IRQHandler,                 // RCC
  422.         EXTI0_IRQHandler,               // EXTI Line 0
  423.         EXTI1_IRQHandler,               // EXTI Line 1
  424.         EXTI2_IRQHandler,               // EXTI Line 2
  425.         EXTI3_IRQHandler,               // EXTI Line 3
  426.         EXTI4_IRQHandler,               // EXTI Line 4
  427.         DMA1_Channel1_IRQHandler,       // DMA1 Channel 1
  428.         DMA1_Channel2_IRQHandler,       // DMA1 Channel 2
  429.         DMA1_Channel3_IRQHandler,       // DMA1 Channel 3
  430.         DMA1_Channel4_IRQHandler,       // DMA1 Channel 4
  431.         DMA1_Channel5_IRQHandler,       // DMA1 Channel 5
  432.         DMA1_Channel6_IRQHandler,       // DMA1 Channel 6
  433.         DMA1_Channel7_IRQHandler,       // DMA1 Channel 7
  434.         ADC1_IRQHandler,                // ADC1
  435.         0,                              // Reserved
  436.         0,                              // Reserved
  437.         0,                              // Reserved
  438.         0,                              // Reserved
  439.         EXTI9_5_IRQHandler,             // EXTI Line 9..5
  440.         TIM1_BRK_TIM15_IRQHandler,      // TIM1 Break and TIM15
  441.         TIM1_UP_TIM16_IRQHandler,       // TIM1 Update and TIM16
  442.         TIM1_TRG_COM_TIM17_IRQHandler,  // TIM1 Trigger and Commutation and TIM17
  443.         TIM1_CC_IRQHandler,             // TIM1 Capture Compare
  444.         TIM2_IRQHandler,                // TIM2
  445.         TIM3_IRQHandler,                // TIM3
  446.         TIM4_IRQHandler,                // TIM4
  447.         I2C1_EV_IRQHandler,             // I2C1 Event
  448.         I2C1_ER_IRQHandler,             // I2C1 Error
  449.         I2C2_EV_IRQHandler,             // I2C2 Event
  450.         I2C2_ER_IRQHandler,             // I2C2 Error
  451.         SPI1_IRQHandler,                // SPI1
  452.         SPI2_IRQHandler,                // SPI2
  453.         USART1_IRQHandler,              // USART1
  454.         USART2_IRQHandler,              // USART2
  455.         USART3_IRQHandler,              // USART3
  456.         EXTI15_10_IRQHandler,           // EXTI Line 15..10
  457.         RTCAlarm_IRQHandler,            // RTC Alarm through EXTI Line
  458.         CEC_IRQHandler,                 // HDMI-CEC
  459.         TIM12_IRQHandler,               // TIM12
  460.         TIM13_IRQHandler,               // TIM13
  461.         TIM14_IRQHandler,               // TIM14
  462.         0,                              // Reserved
  463.         0,                              // Reserved
  464.         0,                              // Reserved
  465.         0,                              // Reserved
  466.         TIM5_IRQHandler,                // TIM5
  467.         SPI3_IRQHandler,                // SPI3
  468.         UART4_IRQHandler,               // UART4
  469.         UART5_IRQHandler,               // UART5
  470.         TIM6_DAC_IRQHandler,            // TIM6 and DAC underrun
  471.         TIM7_IRQHandler,                // TIM7
  472.         DMA2_Channel1_IRQHandler,       // DMA2 Channel1
  473.         DMA2_Channel2_IRQHandler,       // DMA2 Channel2
  474.         DMA2_Channel3_IRQHandler,       // DMA2 Channel3
  475.         DMA2_Channel4_5_IRQHandler,     // DMA2 Channel4 & Channel5
  476.         DMA2_Channel5_IRQHandler,       // DMA2 Channel5

  477. #else
  478. #error "missing vectors"
  479. #endif
  480. };

  481. Handler Default_Handler(void)
  482. {
  483.         while(1){}
  484. }

  485. register int _reg_sp asm("sp");
  486. void Reset_Handler()
  487. {
  488.         do
  489.         {
  490.                 main();
  491.                 _reg_sp = (int)_initial_sp;
  492.         }while(1);
  493. }
复制代码
回复

使用道具 举报

发表于 2017-12-24 03:00:45 | 显示全部楼层
在github上很多单片机的项目都是使用gcc作为编译工具,另外我很想了解 .cc 文件作为测试代码,这个怎么用呢?
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2018-1-5 08:59:18 | 显示全部楼层
安拉 发表于 2017-12-24 03:00
在github上很多单片机的项目都是使用gcc作为编译工具,另外我很想了解 .cc 文件作为测试代码,这个怎么用呢 ...

这个“.cc”它应该也就是一个C语言的.c文件改了一下后缀吧……
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-21 20:27 , Processed in 0.039438 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表