STM32中断向量表
- 格式:pdf
- 大小:46.11 KB
- 文档页数:8
关于STM32 中断向量表的位置、重定向问题首先我们需要跳到main 函数,这个就不多说了。
那么,中断发生后,又是怎么跑到中断入口地址的呢?从stm32f10x.s 可以看到,已经定义好了一大堆的中断响应函数,这就是中断向量表,标号__Vectors,表示中断向量表入口地址,例如:AREA RESET, DATA, READONLY ; 定义只读数据段,实际上是在CODE 区(假设STM32 从FLASH 启动,则此中断向量表起始地址即为0x8000000)EXPORT __Vectors IMPORT OS_CPU_SysTickHandler IMPORT OS_CPU_PendSVHandler__Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD NMI_Handler ; NMI Handler DCD HardFault_Handler ; Hard Fault Handler DCD MemManage_Handler ; MPU Fault Handler DCD BusFault_Handler ; Bus Fault Handler DCD UsageFault_Handler ; Usage Fault Handler 这个向量表的编写是有讲究的,跟硬件一一对应不能乱写的,CPU 找入口地址就靠它了,bin 文件开头就是他们的地址,参考手册RM0008 的10.1.2 节可以看到排列。
我们再结合CORTEX-M3的特性,他上电后根据boot 引脚来决定PC 位置,比如boot 设置为flash 启动,则启动后PC 跳到0x08000000。
此时CPU 会先取2 个地址,第一个是栈顶地址,第二个是复位异常地址,故有了上面的写法,这样就跳到reset_handler。
那么这个reset_handler 的实际地址是多少.?下面的一堆例如Nmi_handler 地址又是多少呢?发生中断是怎么跑到这个地址的呢?下面挨个讲解。
stm32标准库函数手册STM32标准库函数是一种由ST公司推出的一套用于STM32微控制器编程的开发工具,它能够帮助开发者快速地进行芯片的开发、调试和测试。
本文将对STM32标准库函数进行详细的介绍,并提供中文手册,帮助开发者更好地掌握这个工具。
一、STM32标准库函数概述STM32标准库函数是一套由ST公司提供的软件库,包括了一系列用于STM32微控制器的常用功能函数,例如GPIO、USART、SPI、I2C等,这些函数可以用于快速实现各种应用。
同时,ST公司也提供了一些示例代码,可以方便开发者进行学习和参考。
STM32标准库函数可以与各种不同的开发环境集成,例如Keil、IAR、STM32Cube等,方便开发者进行开发。
在使用STM32标准库函数时,可以通过库函数的方式来调用硬件资源,比如设置GPIO口的状态、使用USART进行通信、配置外部中断等。
1. 系统初始化函数:这些函数包括了芯片系统时钟的初始化、中断优先级的设置、时钟输出的配置等,必须在主函数前进行调用。
2. GPIO和外部中断函数:这些函数用于对GPIO口状态的配置和读取,以及对外部中断的控制。
3. USART函数:这些函数用于对串口进行配置和读写操作。
8. DAC函数:这些函数用于对模拟量进行输出。
以下是STM32标准库函数的中文手册,包含了常用函数的介绍和使用方法。
1. 系统初始化函数1.1. RCC配置函数函数原型:void RCC_Configuration(void)函数功能:配置STM32的时钟源和时钟分频系数。
函数说明:在函数内部,首先对PLL时钟源进行配置,然后根据系统时钟的需要选择PLL时钟的分频系数,然后对AHB、APB1、APB2的分频系数进行配置。
最后,开启相应时钟使能位。
函数功能:对STM32的中断向量表进行重定位,并设置各个中断的优先级。
函数说明:中断向量表的地址是由SCB_VTOR寄存器来控制的。
STM32 片内FLASH 被异常改写的问题分享
某STM32 客户反馈,当STM32F407V 芯片频繁的正常通断电的时候,FLASH 会被非法改写,出现各种各样的异常(整片被擦除、中断向量表被改写、写保护被清除等等)。
经过与跟客户沟通了解到:
1、他们是延续之前的项目,进行的一些软硬件简单修改。
之前的项目没有出现过类似的问题。
2、确认通断电的时间是足够,即断电后所有的VDD 都回到0;上电的时序也正常。
3、原理图参考了ST 相关开发板的参考设计。
4、测量工作电压,除了发觉上电时会有些许抖动外,其它一切正常。
尝试让他们改善上电电路,去掉这一抖动。
再次实验,仍然出现类似的问题。
STM32外设使用要点1、时钟安全系统(CSS)时钟安全系统被激活后,时钟监控器将实时监控外部高速振荡器;如果HSE时钟发生故障,外部振荡器自动被关闭,产生时钟安全中断,该中断被连接到Cortex-M3的NMI的中断;同时CSS将内部RC振荡器切换为STM32的系统时钟源(对于STM32F103,时钟失效事件还将被送到高级定时器TIM1的刹车输入端,用以实现电机保护控制)。
操作流程:1)、启动时钟安全系统CSS: RCC_ClockSecuritySystemCmd(ENABLE); (NMI中断是不可屏蔽的!)2)外部振荡器失效时,产生NMI中断,对应的中断程序:void NMIException(void){if (RCC_GetITStatus(RCC_IT_CSS) != RESET){ // HSE、PLL已被禁止(但是PLL设置未变)…… // 客户添加相应的系统保护代码处// 下面为HSE恢复后的预设置代码RCC_HSEConfig(RCC_HSE_ON); // 使能HSERCC_ITConfig(RCC_IT_HSERDY, ENABLE); // 使能HSE就绪中断RCC_ITConfig(RCC_IT_PLLRDY, ENABLE); // 使能PLL就绪中断RCC_ClearITPendingBit(RCC_IT_CSS); // 清除时钟安全系统中断的挂起位// 至此,一旦HSE时钟恢复,将发生HSERDY中断,在RCC中断处理程序里,系统时钟可以设置到以前的状态}}3)、在RCC的中断处理程序中,再对HSE和PLL进行相应的处理。
注意:一旦CSS被激活,当HSE时钟出现故障时将产生CSS中断,同时自动产生 NMI。
NMI将被不断执行,直到CSS中断挂起位被清除。
因此,在NMI的处理程序中必须通过设置时钟中断寄存器(RCC_CIR)里的CSSC位来清除CSS中断。
2、SysTick工作原理Cortex-M3的内核中包含一个SysTick时钟。
STM32 中断向量表的位置、重定向我们也知道怎么跳到main 函数了,那么,中断发生后,又是怎么跑到中断入口地址的呢?从stm32f10x.s 可以看到,已经定义好了一大堆的中断响应函数,这就是中断向量表,标号__Vectors,表示中断向量表入口地址,例如:AREA RESET, DATA, READONLY ;定义只读数据段,实际上是在CODE区(假设STM32 从FLASH 启动,则此中断向量表起始地址即为0x8000000)EXPORT __VectorsIMPORT OS_CPU_SysTickHandler IMPORTOS_CPU_PendSVHandler__Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD NMI_Handler ; NMI Handler DCD HardFault_Handler ; Hard Fault Handler DCD MemManage_Handler ; MPU Fault Handler DCD BusFault_Handler ; Bus Fault Handler DCD UsageFault_Handler ; Usage Fault Handler这个向量表的编写是有讲究的,跟硬件一一对应不能乱写的,CPU 找入口地址就靠它了,bin 文件开头就是他们的地址,参考手册RM0008 的10.1.2 节可以看到排列。
我们再结合CORTEX-M3 的特性,他上电后根据boot 引脚来决定PC 位置,比如boot 设置为flash 启动,则启动后PC 跳到0x08000000。
此时CPU 会先取2 个地址,第一个是栈顶地址,第二个是复位异常地址,故有了上面的写法,这样就跳到reset_handler。
那么这个reset_handler 的实际地址是多少.?下面的一堆例如Nmi_handler 地址又是多少呢?发生中断是怎么跑到这个地址的呢?下面挨个讲解。
STM32 学习记录12 中断向量表从stm32f10x.s 可以看到,已经定义好了一大堆的中断响应函数,这就是中断向量表,标号__Vectors,表示中断向量表入口地址,例如:AREA RESET, DATA, READONLY ;定义只读数据段,实际上是在CODE 区(假设STM32 从FLASH 启动,则此中断向量表起始地址即为0x8000000)EXPORT__VectorsIMPORT OS_CPU_SysTickHandler IMPORTOS_CPU_PendSVHandler__Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD NMI_Handler ; NMI Handler DCD HardFault_Handler ; Hard Fault Handler DCD MemManage_Handler ; MPU Fault Handler DCD BusFault_Handler ; Bus Fault Handler DCD UsageFault_Handler ; Usage Fault Handler这个向量表的编写是有讲究的,跟硬件一一对应不能乱写的,CPU 找入口地址就靠它了,bin 文件开头就是他们的地址,参考手册RM0008 的10.1.2 节可以看到排列。
我们再结合CORTEX-M3 的特性,他上电后根据boot 引脚来决定PC 位置,比如boot 设置为flash 启动,则启动后PC 跳到0x08000000。
此时CPU 会先取2 个地址,第一个是栈顶地址,第二个是复位异常地址,故有了上面的写法,这样就跳到reset_handler。
那么这个reset_handler 的实际地址是多少.?下面的一堆例如Nmi_handler 地址又是多少呢?发生中断是怎么跑到这个地址的呢?下面挨个讲解。
STM32F103XX CAN收发问题——接收中断无法进入Author:lu.hongboDate:2016-08-19内容不多,点到即止。
相信很多人买过一个STM32F103类型的开发板,例如“红牛开发板”这个开发板所提供的例程有很多。
但是有问题的例程也很多。
这里我就简单介绍一个问题例程——CAN收发。
CAN总体说来还是挺复杂的,然而复杂的不是应用。
而是控制器设计,不过这已经在STM32F103类型的芯片中集成了。
用的时候,越简单越好。
STM32也提供了外设库文件。
我就单说说这个<【12】红牛板_CAN (2013.7.31)>例程。
首先,可以肯定的说——这个例程有问题。
1、CAN端口复用的时候没有使用GPIO映射函数——对于使用PB8/PB9进行通信的用户一定很苦恼,为啥例程不能直接运行。
注意这个GPIO映射函数——GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalStateNewState)需要在CAN端口配置的时候调用。
2、请注意对应GPIO组的时钟是不是开启了,因为时钟如果没开,配置将无效3、请注意一个叫做AFIO的模块是不是开启时钟了,如果没有开启,端口影射将会无效4、在有需要注意的就是中断向量表,__Vectors DCD __initial_sp ; Top of StackDCD Reset_Handler ; Reset HandlerDCD NMI_Handler ; NMI HandlerDCD HardFault_Handler ; Hard Fault HandlerDCD MemManage_Handler ; MPU Fault HandlerDCD BusFault_Handler ; Bus Fault HandlerDCD UsageFault_Handler ; Usage Fault HandlerDCD 0 ; ReservedDCD 0 ; ReservedDCD 0 ; ReservedDCD 0 ; ReservedDCD SVC_Handler ; SVCall HandlerDCD DebugMon_Handler ; Debug Monitor HandlerDCD 0 ; ReservedDCD PendSV_Handler ; PendSV HandlerDCD SysTick_Handler ; SysTick Handler; External InterruptsDCD WWDG_IRQHandler ; Window WatchdogDCD PVD_IRQHandler ; PVD through EXTI Line detectDCD TAMPER_IRQHandler ; TamperDCD RTC_IRQHandler ; RTCDCD RCC_IRQHandler ; RCCDCD EXTI0_IRQHandler ; EXTI Line 0DCD EXTI1_IRQHandler ; EXTI Line 1DCD EXTI2_IRQHandler ; EXTI Line 2DCD EXTI3_IRQHandler ; EXTI Line 3DCD EXTI4_IRQHandler ; EXTI Line 4DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7DCD ADC1_2_IRQHandler ; ADC1 & ADC2DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 DCD CAN1_RX1_IRQHandler ; CAN1 RX1DCD CAN1_SCE_IRQHandler ; CAN1 SCEDCD EXTI9_5_IRQHandler ; EXTI Line 9..5DCD TIM1_BRK_IRQHandler ; TIM1 BreakDCD TIM1_UP_IRQHandler ; TIM1 UpdateDCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation DCD TIM1_CC_IRQHandler ; TIM1 Capture CompareDCD TIM2_IRQHandler ; TIM2DCD TIM3_IRQHandler ; TIM3DCD TIM4_IRQHandler ; TIM4DCD I2C1_EV_IRQHandler ; I2C1 EventDCD I2C1_ER_IRQHandler ; I2C1 ErrorDCD I2C2_EV_IRQHandler ; I2C2 EventDCD I2C2_ER_IRQHandler ; I2C2 ErrorDCD SPI1_IRQHandler ; SPI1DCD SPI2_IRQHandler ; SPI2DCD USART1_IRQHandler ; USART1DCD USART2_IRQHandler ; USART2DCD USART3_IRQHandler ; USART3DCD EXTI15_10_IRQHandler ; EXTI Line 15..10DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend DCD TIM8_BRK_IRQHandler ; TIM8 BreakDCD TIM8_UP_IRQHandler ; TIM8 UpdateDCD TIM8_TRG_COM_IRQHandler ; TIM8 Trigger and Commutation DCD TIM8_CC_IRQHandler ; TIM8 Capture CompareDCD ADC3_IRQHandler ; ADC3DCD SDIO_IRQHandler ; SDIODCD TIM5_IRQHandler ; TIM5DCD SPI3_IRQHandler ; SPI3DCD UART4_IRQHandler ; UART4DCD UART5_IRQHandler ; UART5DCD TIM6_IRQHandler ; TIM6DCD TIM7_IRQHandler ; TIM7DCD DMA2_Channel1_IRQHandler ; DMA2 Channel1DCD DMA2_Channel2_IRQHandler ; DMA2 Channel2DCD DMA2_Channel3_IRQHandler ; DMA2 Channel3DCD DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5如下中断向量表的名字是不是和你的中断函数名相同。
关于STM32的IAP与APP互相跳转常见问题分析关于STM32 的IAP 与APP 互相跳转之前做了一个不带系统的IAP 与APP 互相跳转,在网上找了资料后,很顺畅就完成了,后来在IAR 集成开发环境下,IAP 无系统,APP 用UCOS 系统做互相跳转出现了很多问题。
现将IAP 学习过程和实际遇到问题总结一下。
首先说一下什么是IAP。
IAP(In Application Programming)即在应用编程,IAP 是用户自己的程序在运行过程中对User Flash 的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。
通常实现IAP 功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信方式(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。
以上内容摘自原子的开发指南。
说的通俗一点,要做IAP 功能(也可以说成是远程升级功能),需要有两段程序一个是IAP 程序(也可以称为BootLoader),另一个是APP 程序(主应用程序)。
通过USB、串口、CAN 等通讯方式向STM32 发送要升级的程序文件数据(按自定的协议),IAP 程序中将接收到的数据写到APP 程序的地址实现将APP 程序的升级。
这是大致的流程。
此文档只做互相跳转的总结不包含接收数据、FLASH 写入等操作。
说到IAP 升级不得不说两个图(图片引自原子的开发指南)第一个是正常运行时的流程图STM32 的FLASH 地址起始于0x08000000,程序文件就从此地址开始写入。
此外STM32 内部通过“中断向量表”来响应中断,程序启动后,将首先从“中断向量表”取出复位中断向量执行复位中断程序完成启动,而“中断向量表”的起始。
stm32 定时器中断配置
stm32 中断
stm32 的Cortex 内核具有强大的异常响应系统,它把能够打断当前代码执行流程的事件分为异常(excepTIon)和中断(terryp),并把它们用二个表管理起来,编号为0~15 的称为内核异常,而16 以上的则称为外部中断(外,相对内核而言),这个表就称为中断向量表。
而STM32 对这个表重新进行了编排,把编号从-3 至6 的中断向量定义为系统异常,编号为负的内核异常不能被设置优先级,如复位(Reset)、不可屏蔽中断(NMI)、硬错误(Hardfault)。
从编号7 开始的为外部中断,这些中断的优先级都是可以自行设置的。
STM32 的中断如此之多,配置起来并不容易,因此,我们需要一个
强大而方便的中断控制器NVIC,NVIC 是属于Cortex 内核的器件。
stm32 中断配置
配置STM32 的中断只需要理解2 个内容,配置4 个变量即可。
STM32的FLASH擦写次数有限(大概为1万次),所以为了延长FLASH的使用时间,我们平时调试时可以选择在SRAM中进行硬件调试。
除此之外,SRAM 存储器的写入速度比在内部FLASH 中要快得多,所以下载程序到SRAM中的速度较快。
所以我们很有必要建立两个版本的工程配置,在SRAM中调试程序完毕后,再把代码下载到FLASH中即可。
这篇笔记主要分享在keil5中配置FLASH调试与SRAM调试的详细配置方法及如何切换两种配置。
本篇笔记以STM32F103ZET6为例。
其FLASH大小为512KB,SRAM的大小为64KB。
FLASH基地址为0x08000000,SRAM基地址为0x20000000。
在STM32F10XXX 里,可以通过BOOT1、BOOT0引脚来选择三种不同的模式:我们要在FLASH中进行硬件仿真调试还是在RAM中进行硬件仿真调试需要对这两个boot脚进行对应的设置以及程序下载的地址进行设置。
在F L A S H中进行硬件仿真调试1、硬件设置BOOT0配置为0,BOOT1随意设置。
2、keil设置本文以keil5为例。
步骤如下:(1)点击如下按钮,修改target的名称:target的名称是可以随意更改的,这里我们改为FLASH。
(2)点击Project->Options for Target Flash...(也可以点击魔术棒那个图标)进行配置。
首先对Target选项卡设置:设置IROM1的起始地址为0x8000000,大小为0x80000,即FLASH的基地址与大小。
设置IRAM1为0x20000000,大小为0x10000,即SRAM的基地址与大小。
(3)Debug选项设置:调试器根据实际进行选择,我们这里使用的调试器是ULINK2。
其它的按默认设置即可,然后点击Settings:(4)编译,然后按Ctrl+F5进入调试界面:然后点击全速运行:在Disassembly窗口中可看到地址为0x0800xxxx,说明代码烧进了FLASH中,这时候就可以像使用其他C语言IDE调试C语言程序一样打断点、单步运行我们的STM32程序啦。
STM32启动过程解析1、通过boot引脚设置可以将中断向量表定位于SRAM区,即起始地址为0x2000000,同时复位后PC指针位于0x2000000处;2、通过boot引脚设置可以将中断向量表定位于FLASH区,即起始地址为0x8000000,同时复位后PC指针位于0x8000000处;3、通过boot引脚设置可以将中断向量表定位于内置Bootloader区,本文不对这种情况做论述;而Cortex-M3内核规定,起始地址必须存放堆顶指针,而第二个地址则必须存放复位中断入口向量地址,这样在Cortex-M3内核复位后,会自动从起始地址的下一个32位空间取出复位中断入口向量,跳转执行复位中断服务程序。
对比ARM7/ARM9内核,Cortex-M3内核则是固定了中断向量表的位置而起始地址是可变化的。
有了上述准备后,下面以STM32的2.02固件库提供的启动文件“stm32f10x_vector.s”为模板,对STM32的启动过程做一个简要而全面的解析。
程序清单一:;文件“stm32f10x_vector.s”,其中注释为行号DATA_IN_ExtSRAM EQU 0 ;1Stack_Size EQU 0x00000400 ;2AREA STACK, NOINIT, READWRITE, ALIGN = 3 ;3Stack_Mem SPACE Stack_Size ;4__initial_sp ;5Heap_Size EQU 0x00000400 ;6AREA HEAP, NOINIT, READWRITE, ALIGN = 3 ;7__heap_base ;8Heap_Mem SPACE Heap_Size ;9__heap_limit ;10THUMB ;11PRESERVE8 ;12IMPORT NMIException ;13IMPORT HardFaultException ;14IMPORT MemManageException ;15IMPORT BusFaultException ;16IMPORT UsageFaultException ;17IMPORT SVCHandler ;18IMPORT DebugMonitor ;19IMPORT PendSVC ;20IMPORT SysTickHandler ;21IMPORT WWDG_IRQHandler ;22IMPORT PVD_IRQHandler ;23IMPORT TAMPER_IRQHandler ;24IMPORT RTC_IRQHandler ;25IMPORT FLASH_IRQHandler ;26IMPORT EXTI0_IRQHandler ;28IMPORT EXTI1_IRQHandler ;29IMPORT EXTI2_IRQHandler ;30IMPORT EXTI3_IRQHandler ;31IMPORT EXTI4_IRQHandler ;32IMPORT DMA1_Channel1_IRQHandler ;33 IMPORT DMA1_Channel2_IRQHandler ;34 IMPORT DMA1_Channel3_IRQHandler ;35 IMPORT DMA1_Channel4_IRQHandler ;36 IMPORT DMA1_Channel5_IRQHandler ;37 IMPORT DMA1_Channel6_IRQHandler ;38 IMPORT DMA1_Channel7_IRQHandler ;39 IMPORT ADC1_2_IRQHandler ;40IMPORT USB_HP_CAN_TX_IRQHandler ;41 IMPORT USB_LP_CAN_RX0_IRQHandler ;42 IMPORT CAN_RX1_IRQHandler ;43 IMPORT CAN_SCE_IRQHandler ;44 IMPORT EXTI9_5_IRQHandler ;45IMPORT TIM1_BRK_IRQHandler ;46 IMPORT TIM1_UP_IRQHandler ;47 IMPORT TIM1_TRG_COM_IRQHandler ;48 IMPORT TIM1_CC_IRQHandler ;49 IMPORT TIM2_IRQHandler ;50IMPORT TIM3_IRQHandler ;51IMPORT TIM4_IRQHandler ;52IMPORT I2C1_EV_IRQHandler ;53IMPORT I2C1_ER_IRQHandler ;54IMPORT I2C2_EV_IRQHandler ;55IMPORT I2C2_ER_IRQHandler ;56IMPORT SPI1_IRQHandler ;57IMPORT SPI2_IRQHandler ;58IMPORT USART1_IRQHandler ;59IMPORT USART2_IRQHandler ;60IMPORT USART3_IRQHandler ;61IMPORT EXTI15_10_IRQHandler ;62 IMPORT RTCAlarm_IRQHandler ;63 IMPORT USBWakeUp_IRQHandler ;64 IMPORT TIM8_BRK_IRQHandler ;65 IMPORT TIM8_UP_IRQHandler ;66 IMPORT TIM8_TRG_COM_IRQHandler ;67 IMPORT TIM8_CC_IRQHandler ;68 IMPORT ADC3_IRQHandler ;69IMPORT FSMC_IRQHandler ;70IMPORT TIM5_IRQHandler ;72IMPORT SPI3_IRQHandler ;73IMPORT UART4_IRQHandler ;74IMPORT UART5_IRQHandler ;75IMPORT TIM6_IRQHandler ;76IMPORT TIM7_IRQHandler ;77IMPORT DMA2_Channel1_IRQHandler ;78 IMPORT DMA2_Channel2_IRQHandler ;79 IMPORT DMA2_Channel3_IRQHandler ;80 IMPORT DMA2_Channel4_5_IRQHandler ;81 AREA RESET, DATA, READONLY ;82 EXPORT __Vectors ;83__Vectors ;84DCD __initial_sp ;85DCD Reset_Handler ;86DCD NMIException ;87DCD HardFaultException ;88DCD MemManageException ;89DCD BusFaultException ;90DCD UsageFaultException ;91DCD 0 ;92DCD 0 ;93DCD 0 ;94DCD 0 ;95DCD SVCHandler ;96DCD DebugMonitor ;97DCD 0 ;98DCD PendSVC ;99DCD SysTickHandler ;100DCD WWDG_IRQHandler ;101DCD PVD_IRQHandler ;102DCD TAMPER_IRQHandler ;103DCD RTC_IRQHandler ;104DCD FLASH_IRQHandler ;105DCD RCC_IRQHandler ;106DCD EXTI0_IRQHandler ;107DCD EXTI1_IRQHandler ;108DCD EXTI2_IRQHandler ;109DCD EXTI3_IRQHandler ;110DCD EXTI4_IRQHandler ;111DCD DMA1_Channel1_IRQHandler ;112 DCD DMA1_Channel2_IRQHandler ;113 DCD DMA1_Channel3_IRQHandler ;114DCD DMA1_Channel5_IRQHandler ;116 DCD DMA1_Channel6_IRQHandler ;117 DCD DMA1_Channel7_IRQHandler ;118 DCD ADC1_2_IRQHandler ;119DCD USB_HP_CAN_TX_IRQHandler ;120 DCD USB_LP_CAN_RX0_IRQHandler ;121 DCD CAN_RX1_IRQHandler ;122DCD CAN_SCE_IRQHandler ;123DCD EXTI9_5_IRQHandler ;124DCD TIM1_BRK_IRQHandler ;125DCD TIM1_UP_IRQHandler ;126DCD TIM1_TRG_COM_IRQHandler ;127 DCD TIM1_CC_IRQHandler ;128DCD TIM2_IRQHandler ;129DCD TIM3_IRQHandler ;130DCD TIM4_IRQHandler ;131DCD I2C1_EV_IRQHandler ;132DCD I2C1_ER_IRQHandler ;133DCD I2C2_EV_IRQHandler ;134DCD I2C2_ER_IRQHandler ;135DCD SPI1_IRQHandler ;136DCD SPI2_IRQHandler ;137DCD USART1_IRQHandler ;138DCD USART2_IRQHandler ;139DCD USART3_IRQHandler ;140DCD EXTI15_10_IRQHandler ;141DCD RTCAlarm_IRQHandler ;142DCD USBWakeUp_IRQHandler ;143DCD TIM8_BRK_IRQHandler ;144DCD TIM8_UP_IRQHandler ;145DCD TIM8_TRG_COM_IRQHandler ;146 DCD TIM8_CC_IRQHandler ;147DCD ADC3_IRQHandler ;148DCD FSMC_IRQHandler ;149DCD SDIO_IRQHandler ;150DCD TIM5_IRQHandler ;151DCD SPI3_IRQHandler ;152DCD UART4_IRQHandler ;153DCD UART5_IRQHandler ;154DCD TIM6_IRQHandler ;155DCD TIM7_IRQHandler ;156DCD DMA2_Channel1_IRQHandler ;157 DCD DMA2_Channel2_IRQHandler ;158DCD DMA2_Channel4_5_IRQHandler ;160 AREA |.text|, CODE, READONLY ;161 Reset_Handler PROC ;162EXPORT Reset_Handler ;163IF DATA_IN_ExtSRAM == 1 ;164LDR R0,= 0x00000114 ;165LDR R1,= 0x40021014 ;166STR R0,[R1] ;167LDR R0,= 0x000001E0 ;168LDR R1,= 0x40021018 ;169STR R0,[R1] ;170LDR R0,= 0x44BB44BB ;171LDR R1,= 0x40011400 ;172STR R0,[R1] ;173LDR R0,= 0xBBBBBBBB ;174LDR R1,= 0x40011404 ;175STR R0,[R1] ;176LDR R0,= 0xB44444BB ;177LDR R1,= 0x40011800 ;178STR R0,[R1] ;179LDR R0,= 0xBBBBBBBB ;180LDR R1,= 0x40011804 ;181STR R0,[R1] ;182LDR R0,= 0x44BBBBBB ;183LDR R1,= 0x40011C00 ;184STR R0,[R1] ;185LDR R0,= 0xBBBB4444 ;186LDR R1,= 0x40011C04 ;187STR R0,[R1] ;188LDR R0,= 0x44BBBBBB ;189LDR R1,= 0x40012000 ;190STR R0,[R1] ;191LDR R0,= 0x44444B44 ;192LDR R1,= 0x40012004 ;193STR R0,[R1] ;194LDR R0,= 0x00001011 ;195LDR R1,= 0xA0000010 ;196STR R0,[R1] ;197LDR R0,= 0x00000200 ;198LDR R1,= 0xA0000014 ;199STR R0,[R1] ;200ENDIF ;201IMPORT __main ;202LDR R0, =__main ;203BX R0 ;204ENDP ;205ALIGN ;206IF :DEF:__MICROLIB ;207EXPORT __initial_sp ;208EXPORT __heap_base ;209EXPORT __heap_limit ;210ELSE ;211IMPORT __use_two_region_memory ;212EXPORT __user_initial_stackheap ;213__user_initial_stackheap ;214LDR R0, = Heap_Mem ;215LDR R1, = (Stack_Mem + Stack_Size) ;216LDR R2, = (Heap_Mem + Heap_Size) ;217LDR R3, = Stack_Mem ;218BX LR ;219ALIGN ;220ENDIF ;221END ;222ENDIF ;223END ;224-----------------------------------------------------------------------------------------------------------------------------------------------------------------如程序清单一,STM32的启动代码一共224行,使用了汇编语言编写,这其中的主要原因下文将会给出交代。
STM32F103XX CAN收发问题——接收中断无法进入Author:lu.hongboDate:2016-08-19内容不多,点到即止。
相信很多人买过一个STM32F103类型的开发板,例如“红牛开发板”这个开发板所提供的例程有很多。
但是有问题的例程也很多。
这里我就简单介绍一个问题例程——CAN收发。
CAN总体说来还是挺复杂的,然而复杂的不是应用。
而是控制器设计,不过这已经在STM32F103类型的芯片中集成了。
用的时候,越简单越好。
STM32也提供了外设库文件。
我就单说说这个<【12】红牛板_CAN (2013.7.31)>例程。
首先,可以肯定的说——这个例程有问题。
1、CAN端口复用的时候没有使用GPIO映射函数——对于使用PB8/PB9进行通信的用户一定很苦恼,为啥例程不能直接运行。
注意这个GPIO映射函数——GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalStateNewState)需要在CAN端口配置的时候调用。
2、请注意对应GPIO组的时钟是不是开启了,因为时钟如果没开,配置将无效3、请注意一个叫做AFIO的模块是不是开启时钟了,如果没有开启,端口影射将会无效4、在有需要注意的就是中断向量表,__Vectors DCD __initial_sp ; Top of StackDCD Reset_Handler ; Reset HandlerDCD NMI_Handler ; NMI HandlerDCD HardFault_Handler ; Hard Fault HandlerDCD MemManage_Handler ; MPU Fault HandlerDCD BusFault_Handler ; Bus Fault HandlerDCD UsageFault_Handler ; Usage Fault HandlerDCD 0 ; ReservedDCD 0 ; ReservedDCD 0 ; ReservedDCD 0 ; ReservedDCD SVC_Handler ; SVCall HandlerDCD DebugMon_Handler ; Debug Monitor HandlerDCD 0 ; ReservedDCD PendSV_Handler ; PendSV HandlerDCD SysTick_Handler ; SysTick Handler; External InterruptsDCD WWDG_IRQHandler ; Window WatchdogDCD PVD_IRQHandler ; PVD through EXTI Line detectDCD TAMPER_IRQHandler ; TamperDCD RTC_IRQHandler ; RTCDCD RCC_IRQHandler ; RCCDCD EXTI0_IRQHandler ; EXTI Line 0DCD EXTI1_IRQHandler ; EXTI Line 1DCD EXTI2_IRQHandler ; EXTI Line 2DCD EXTI3_IRQHandler ; EXTI Line 3DCD EXTI4_IRQHandler ; EXTI Line 4DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7DCD ADC1_2_IRQHandler ; ADC1 & ADC2DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 DCD CAN1_RX1_IRQHandler ; CAN1 RX1DCD CAN1_SCE_IRQHandler ; CAN1 SCEDCD EXTI9_5_IRQHandler ; EXTI Line 9..5DCD TIM1_BRK_IRQHandler ; TIM1 BreakDCD TIM1_UP_IRQHandler ; TIM1 UpdateDCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation DCD TIM1_CC_IRQHandler ; TIM1 Capture CompareDCD TIM2_IRQHandler ; TIM2DCD TIM3_IRQHandler ; TIM3DCD TIM4_IRQHandler ; TIM4DCD I2C1_EV_IRQHandler ; I2C1 EventDCD I2C1_ER_IRQHandler ; I2C1 ErrorDCD I2C2_EV_IRQHandler ; I2C2 EventDCD I2C2_ER_IRQHandler ; I2C2 ErrorDCD SPI1_IRQHandler ; SPI1DCD SPI2_IRQHandler ; SPI2DCD USART1_IRQHandler ; USART1DCD USART2_IRQHandler ; USART2DCD USART3_IRQHandler ; USART3DCD EXTI15_10_IRQHandler ; EXTI Line 15..10DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend DCD TIM8_BRK_IRQHandler ; TIM8 BreakDCD TIM8_UP_IRQHandler ; TIM8 UpdateDCD TIM8_TRG_COM_IRQHandler ; TIM8 Trigger and Commutation DCD TIM8_CC_IRQHandler ; TIM8 Capture CompareDCD ADC3_IRQHandler ; ADC3DCD SDIO_IRQHandler ; SDIODCD TIM5_IRQHandler ; TIM5DCD SPI3_IRQHandler ; SPI3DCD UART4_IRQHandler ; UART4DCD UART5_IRQHandler ; UART5DCD TIM6_IRQHandler ; TIM6DCD TIM7_IRQHandler ; TIM7DCD DMA2_Channel1_IRQHandler ; DMA2 Channel1DCD DMA2_Channel2_IRQHandler ; DMA2 Channel2DCD DMA2_Channel3_IRQHandler ; DMA2 Channel3DCD DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5如下中断向量表的名字是不是和你的中断函数名相同。
STM32中断优先级的处理原则1. 引言在嵌入式系统中,中断是一种常用的机制,用于在特定事件发生时打断CPU的正常执行流程,转而执行特定的中断处理程序。
STM32系列微控制器提供了丰富的中断控制功能,并支持多个优先级的中断。
正确设置中断优先级是确保系统稳定性和可靠性的重要步骤。
本文将介绍STM32中断优先级处理原则,包括如何设置优先级、不同类型中断之间的关系以及注意事项等内容。
2. 中断优先级概述STM32微控制器支持多个优先级的中断,其中数字越小表示优先级越高。
当多个中断同时发生时,只有具有最高优先级的中断会被响应。
其他低优先级的中断将被挂起,等待当前正在处理的高优先级中断完成后再进行处理。
每个STM32微控制器都有一个向量表(Vector Table),其中存储了各个中断向量及其对应的ISR(Interrupt Service Routine)。
在初始化过程中,需要将需要使用到的ISR函数指针写入向量表相应位置。
3. 中断优先级设置原则在STM32微控制器上配置和设置各个外设的中断优先级时,需要遵循以下原则:3.1 高优先级中断的响应时间高优先级中断的响应时间应尽量短,以确保系统对紧急事件的及时响应。
通常情况下,系统启动和初始化过程中会配置一些必要的高优先级中断,如系统滴答定时器(SysTick)等。
3.2 低优先级中断的执行时间低优先级中断可能会被高优先级中断打断,在高优先级中断执行期间无法得到处理。
因此,低优先级中断的执行时间应尽量短,以减少对系统性能和实时性的影响。
STM32微控制器支持不同外设之间和相同外设内部的中断嵌套。
在设置嵌套中断时,需要注意以下原则: - 外设之间:不同外设之间的中断嵌套顺序应根据具体需求和业务逻辑进行设置。
- 外设内部:在具有多个可触发相同类型中断源的外设上,需要根据业务需求设置不同源之间的触发次序。
3.4 中断抢占与屏蔽STM32微控制器支持中断的抢占和屏蔽功能。
/***@brief STM32F10x Interrupt Number Definition,according to the selected device*in@ref Library_configuration_section*/typedef enum IRQn{/******Cortex-M3Processor Exceptions Numbers***************************************************/ NonMaskableInt_IRQn=-14,/*!<2Non Maskable Interrupt*/ MemoryManagement_IRQn=-12,/*!<4Cortex-M3Memory Management Interrupt*/ BusFault_IRQn=-11,/*!<5Cortex-M3Bus Fault Interrupt*/ UsageFault_IRQn=-10,/*!<6Cortex-M3Usage Fault Interrupt*/ SVCall_IRQn=-5,/*!<11Cortex-M3SV Call Interrupt*/ DebugMonitor_IRQn=-4,/*!<12Cortex-M3Debug Monitor Interrupt*/ PendSV_IRQn=-2,/*!<14Cortex-M3Pend SV Interrupt*/ SysTick_IRQn=-1,/*!<15Cortex-M3System Tick Interrupt*//******STM32specific Interrupt Numbers*********************************************************/ WWDG_IRQn=0,/*!<Window WatchDog Interrupt*/ PVD_IRQn=1,/*!<PVD through EXTI Line detection Interrupt*/ TAMPER_IRQn=2,/*!<Tamper Interrupt*/ RTC_IRQn=3,/*!<RTC global Interrupt*/ FLASH_IRQn=4,/*!<FLASH global Interrupt*/ RCC_IRQn=5,/*!<RCC global Interrupt*/ EXTI0_IRQn=6,/*!<EXTI Line0Interrupt*/ EXTI1_IRQn=7,/*!<EXTI Line1Interrupt*/ EXTI2_IRQn=8,/*!<EXTI Line2Interrupt*/ EXTI3_IRQn=9,/*!<EXTI Line3Interrupt*/ EXTI4_IRQn=10,/*!<EXTI Line4Interrupt*/ DMA1_Channel1_IRQn=11,/*!<DMA1Channel1global Interrupt*/ DMA1_Channel2_IRQn=12,/*!<DMA1Channel2global Interrupt*/ DMA1_Channel3_IRQn=13,/*!<DMA1Channel3global Interrupt*/ DMA1_Channel4_IRQn=14,/*!<DMA1Channel4global Interrupt*/ DMA1_Channel5_IRQn=15,/*!<DMA1Channel5global Interrupt*/ DMA1_Channel6_IRQn=16,/*!<DMA1Channel6global Interrupt*/ DMA1_Channel7_IRQn=17,/*!<DMA1Channel7global Interrupt*/#ifdef STM32F10X_LDADC1_2_IRQn=18,/*!<ADC1and ADC2global Interrupt*/ USB_HP_CAN1_TX_IRQn=19,/*!<USB Device High Priority or CAN1TX Interrupts*/ USB_LP_CAN1_RX0_IRQn=20,/*!<USB Device Low Priority or CAN1RX0Interrupts*/ CAN1_RX1_IRQn=21,/*!<CAN1RX1Interrupt*/ CAN1_SCE_IRQn=22,/*!<CAN1SCE Interrupt*/ EXTI9_5_IRQn=23,/*!<External Line[9:5]Interrupts*/ TIM1_BRK_IRQn=24,/*!<TIM1Break Interrupt*/TIM1_TRG_COM_IRQn=26,/*!<TIM1Trigger and Commutation Interrupt*/ TIM1_CC_IRQn=27,/*!<TIM1Capture Compare Interrupt*/TIM2_IRQn=28,/*!<TIM2global Interrupt*/TIM3_IRQn=29,/*!<TIM3global Interrupt*/I2C1_EV_IRQn=31,/*!<I2C1Event Interrupt*/I2C1_ER_IRQn=32,/*!<I2C1Error Interrupt*/SPI1_IRQn=35,/*!<SPI1global Interrupt*/ USART1_IRQn=37,/*!<USART1global Interrupt*/ USART2_IRQn=38,/*!<USART2global Interrupt*/ EXTI15_10_IRQn=40,/*!<External Line[15:10]Interrupts*/ RTCAlarm_IRQn=41,/*!<RTC Alarm through EXTI Line Interrupt*/ USBWakeUp_IRQn=42/*!<USB Device WakeUp from suspend through EXTI Line Interrupt */#endif/*STM32F10X_LD*/#ifdef STM32F10X_LD_VLADC1_IRQn=18,/*!<ADC1global Interrupt*/EXTI9_5_IRQn=23,/*!<External Line[9:5]Interrupts*/TIM1_BRK_TIM15_IRQn=24,/*!<TIM1Break and TIM15Interrupts*/ TIM1_UP_TIM16_IRQn=25,/*!<TIM1Update and TIM16Interrupts*/ TIM1_TRG_COM_TIM17_IRQn=26,/*!<TIM1Trigger and Commutation and TIM17Interrupt*/ TIM1_CC_IRQn=27,/*!<TIM1Capture Compare Interrupt*/TIM2_IRQn=28,/*!<TIM2global Interrupt*/TIM3_IRQn=29,/*!<TIM3global Interrupt*/I2C1_EV_IRQn=31,/*!<I2C1Event Interrupt*/I2C1_ER_IRQn=32,/*!<I2C1Error Interrupt*/SPI1_IRQn=35,/*!<SPI1global Interrupt*/ USART1_IRQn=37,/*!<USART1global Interrupt*/ USART2_IRQn=38,/*!<USART2global Interrupt*/ EXTI15_10_IRQn=40,/*!<External Line[15:10]Interrupts*/ RTCAlarm_IRQn=41,/*!<RTC Alarm through EXTI Line Interrupt*/ CEC_IRQn=42,/*!<HDMI-CEC Interrupt*/TIM6_DAC_IRQn=54,/*!<TIM6and DAC underrun Interrupt*/TIM7_IRQn=55/*!<TIM7Interrupt*/#endif/*STM32F10X_LD_VL*/#ifdef STM32F10X_MDADC1_2_IRQn=18,/*!<ADC1and ADC2global Interrupt*/ USB_HP_CAN1_TX_IRQn=19,/*!<USB Device High Priority or CAN1TX Interrupts*/ USB_LP_CAN1_RX0_IRQn=20,/*!<USB Device Low Priority or CAN1RX0Interrupts*/ CAN1_RX1_IRQn=21,/*!<CAN1RX1Interrupt*/CAN1_SCE_IRQn=22,/*!<CAN1SCE Interrupt*/EXTI9_5_IRQn=23,/*!<External Line[9:5]Interrupts*/TIM1_UP_IRQn=25,/*!<TIM1Update Interrupt*/TIM1_TRG_COM_IRQn=26,/*!<TIM1Trigger and Commutation Interrupt*/ TIM1_CC_IRQn=27,/*!<TIM1Capture Compare Interrupt*/TIM2_IRQn=28,/*!<TIM2global Interrupt*/TIM3_IRQn=29,/*!<TIM3global Interrupt*/TIM4_IRQn=30,/*!<TIM4global Interrupt*/I2C1_EV_IRQn=31,/*!<I2C1Event Interrupt*/I2C1_ER_IRQn=32,/*!<I2C1Error Interrupt*/I2C2_EV_IRQn=33,/*!<I2C2Event Interrupt*/I2C2_ER_IRQn=34,/*!<I2C2Error Interrupt*/SPI1_IRQn=35,/*!<SPI1global Interrupt*/SPI2_IRQn=36,/*!<SPI2global Interrupt*/ USART1_IRQn=37,/*!<USART1global Interrupt*/ USART2_IRQn=38,/*!<USART2global Interrupt*/ USART3_IRQn=39,/*!<USART3global Interrupt*/ EXTI15_10_IRQn=40,/*!<External Line[15:10]Interrupts*/ RTCAlarm_IRQn=41,/*!<RTC Alarm through EXTI Line Interrupt*/ USBWakeUp_IRQn=42/*!<USB Device WakeUp from suspend through EXTI Line Interrupt */#endif/*STM32F10X_MD*/#ifdef STM32F10X_MD_VLADC1_IRQn=18,/*!<ADC1global Interrupt*/EXTI9_5_IRQn=23,/*!<External Line[9:5]Interrupts*/TIM1_BRK_TIM15_IRQn=24,/*!<TIM1Break and TIM15Interrupts*/ TIM1_UP_TIM16_IRQn=25,/*!<TIM1Update and TIM16Interrupts*/ TIM1_TRG_COM_TIM17_IRQn=26,/*!<TIM1Trigger and Commutation and TIM17Interrupt*/ TIM1_CC_IRQn=27,/*!<TIM1Capture Compare Interrupt*/TIM2_IRQn=28,/*!<TIM2global Interrupt*/TIM3_IRQn=29,/*!<TIM3global Interrupt*/TIM4_IRQn=30,/*!<TIM4global Interrupt*/I2C1_EV_IRQn=31,/*!<I2C1Event Interrupt*/I2C1_ER_IRQn=32,/*!<I2C1Error Interrupt*/I2C2_EV_IRQn=33,/*!<I2C2Event Interrupt*/I2C2_ER_IRQn=34,/*!<I2C2Error Interrupt*/SPI1_IRQn=35,/*!<SPI1global Interrupt*/SPI2_IRQn=36,/*!<SPI2global Interrupt*/ USART1_IRQn=37,/*!<USART1global Interrupt*/ USART2_IRQn=38,/*!<USART2global Interrupt*/ USART3_IRQn=39,/*!<USART3global Interrupt*/ EXTI15_10_IRQn=40,/*!<External Line[15:10]Interrupts*/ RTCAlarm_IRQn=41,/*!<RTC Alarm through EXTI Line Interrupt*/ CEC_IRQn=42,/*!<HDMI-CEC Interrupt*/TIM6_DAC_IRQn=54,/*!<TIM6and DAC underrun Interrupt*/TIM7_IRQn=55/*!<TIM7Interrupt*/#endif/*STM32F10X_MD_VL*/#ifdef STM32F10X_HDADC1_2_IRQn=18,/*!<ADC1and ADC2global Interrupt*/ USB_HP_CAN1_TX_IRQn=19,/*!<USB Device High Priority or CAN1TX Interrupts*/ USB_LP_CAN1_RX0_IRQn=20,/*!<USB Device Low Priority or CAN1RX0Interrupts*/ CAN1_RX1_IRQn=21,/*!<CAN1RX1Interrupt*/CAN1_SCE_IRQn=22,/*!<CAN1SCE Interrupt*/EXTI9_5_IRQn=23,/*!<External Line[9:5]Interrupts*/TIM1_BRK_IRQn=24,/*!<TIM1Break Interrupt*/TIM1_UP_IRQn=25,/*!<TIM1Update Interrupt*/TIM1_TRG_COM_IRQn=26,/*!<TIM1Trigger and Commutation Interrupt*/ TIM1_CC_IRQn=27,/*!<TIM1Capture Compare Interrupt*/TIM2_IRQn=28,/*!<TIM2global Interrupt*/TIM3_IRQn=29,/*!<TIM3global Interrupt*/TIM4_IRQn=30,/*!<TIM4global Interrupt*/I2C1_EV_IRQn=31,/*!<I2C1Event Interrupt*/I2C1_ER_IRQn=32,/*!<I2C1Error Interrupt*/I2C2_EV_IRQn=33,/*!<I2C2Event Interrupt*/I2C2_ER_IRQn=34,/*!<I2C2Error Interrupt*/SPI1_IRQn=35,/*!<SPI1global Interrupt*/SPI2_IRQn=36,/*!<SPI2global Interrupt*/ USART1_IRQn=37,/*!<USART1global Interrupt*/ USART2_IRQn=38,/*!<USART2global Interrupt*/ USART3_IRQn=39,/*!<USART3global Interrupt*/ EXTI15_10_IRQn=40,/*!<External Line[15:10]Interrupts*/ RTCAlarm_IRQn=41,/*!<RTC Alarm through EXTI Line Interrupt*/ USBWakeUp_IRQn=42,/*!<USB Device WakeUp from suspend through EXTI Line Interrupt */TIM8_BRK_IRQn=43,/*!<TIM8Break Interrupt*/TIM8_UP_IRQn=44,/*!<TIM8Update Interrupt*/TIM8_TRG_COM_IRQn=45,/*!<TIM8Trigger and Commutation Interrupt*/ TIM8_CC_IRQn=46,/*!<TIM8Capture Compare Interrupt*/ ADC3_IRQn=47,/*!<ADC3global Interrupt*/ FSMC_IRQn=48,/*!<FSMC global Interrupt*/ SDIO_IRQn=49,/*!<SDIO global Interrupt*/TIM5_IRQn=50,/*!<TIM5global Interrupt*/SPI3_IRQn=51,/*!<SPI3global Interrupt*/ UART4_IRQn=52,/*!<UART4global Interrupt*/ UART5_IRQn=53,/*!<UART5global Interrupt*/TIM6_IRQn=54,/*!<TIM6global Interrupt*/TIM7_IRQn=55,/*!<TIM7global Interrupt*/DMA2_Channel1_IRQn=56,/*!<DMA2Channel1global Interrupt*/ DMA2_Channel2_IRQn=57,/*!<DMA2Channel2global Interrupt*/ DMA2_Channel3_IRQn=58,/*!<DMA2Channel3global Interrupt*/ DMA2_Channel4_5_IRQn=59/*!<DMA2Channel4and Channel5global Interrupt*/ #endif/*STM32F10X_HD*/#ifdef STM32F10X_HD_VLADC1_IRQn=18,/*!<ADC1global Interrupt*/ EXTI9_5_IRQn=23,/*!<External Line[9:5]Interrupts*/ TIM1_BRK_TIM15_IRQn=24,/*!<TIM1Break and TIM15Interrupts*/ TIM1_UP_TIM16_IRQn=25,/*!<TIM1Update and TIM16Interrupts*/ TIM1_TRG_COM_TIM17_IRQn=26,/*!<TIM1Trigger and Commutation and TIM17Interrupt*/ TIM1_CC_IRQn=27,/*!<TIM1Capture Compare Interrupt*/ TIM2_IRQn=28,/*!<TIM2global Interrupt*/ TIM3_IRQn=29,/*!<TIM3global Interrupt*/ TIM4_IRQn=30,/*!<TIM4global Interrupt*/I2C1_EV_IRQn=31,/*!<I2C1Event Interrupt*/I2C1_ER_IRQn=32,/*!<I2C1Error Interrupt*/I2C2_EV_IRQn=33,/*!<I2C2Event Interrupt*/I2C2_ER_IRQn=34,/*!<I2C2Error Interrupt*/ SPI1_IRQn=35,/*!<SPI1global Interrupt*/ SPI2_IRQn=36,/*!<SPI2global Interrupt*/ USART1_IRQn=37,/*!<USART1global Interrupt*/ USART2_IRQn=38,/*!<USART2global Interrupt*/ USART3_IRQn=39,/*!<USART3global Interrupt*/ EXTI15_10_IRQn=40,/*!<External Line[15:10]Interrupts*/ RTCAlarm_IRQn=41,/*!<RTC Alarm through EXTI Line Interrupt*/ CEC_IRQn=42,/*!<HDMI-CEC Interrupt*/ TIM12_IRQn=43,/*!<TIM12global Interrupt*/ TIM13_IRQn=44,/*!<TIM13global Interrupt*/ TIM14_IRQn=45,/*!<TIM14global Interrupt*/ TIM5_IRQn=50,/*!<TIM5global Interrupt*/ SPI3_IRQn=51,/*!<SPI3global Interrupt*/ UART4_IRQn=52,/*!<UART4global Interrupt*/ UART5_IRQn=53,/*!<UART5global Interrupt*/ TIM6_DAC_IRQn=54,/*!<TIM6and DAC underrun Interrupt*/ TIM7_IRQn=55,/*!<TIM7Interrupt*/ DMA2_Channel1_IRQn=56,/*!<DMA2Channel1global Interrupt*/ DMA2_Channel2_IRQn=57,/*!<DMA2Channel2global Interrupt*/ DMA2_Channel3_IRQn=58,/*!<DMA2Channel3global Interrupt*/ DMA2_Channel4_5_IRQn=59,/*!<DMA2Channel4and Channel5global Interrupt*/ DMA2_Channel5_IRQn=60/*!<DMA2Channel5global Interrupt(DMA2Channel5ismapped at position60only if the MISC_REMAP bit inthe AFIO_MAPR2register is set)*/#endif/*STM32F10X_HD_VL*/#ifdef STM32F10X_XLADC1_2_IRQn=18,/*!<ADC1and ADC2global Interrupt*/ USB_HP_CAN1_TX_IRQn=19,/*!<USB Device High Priority or CAN1TX Interrupts*/ USB_LP_CAN1_RX0_IRQn=20,/*!<USB Device Low Priority or CAN1RX0Interrupts*/ CAN1_RX1_IRQn=21,/*!<CAN1RX1Interrupt*/CAN1_SCE_IRQn=22,/*!<CAN1SCE Interrupt*/EXTI9_5_IRQn=23,/*!<External Line[9:5]Interrupts*/TIM1_BRK_TIM9_IRQn=24,/*!<TIM1Break Interrupt and TIM9global Interrupt*/ TIM1_UP_TIM10_IRQn=25,/*!<TIM1Update Interrupt and TIM10global Interrupt*/ TIM1_TRG_COM_TIM11_IRQn=26,/*!<TIM1Trigger and Commutation Interrupt and TIM11global interrupt*/TIM1_CC_IRQn=27,/*!<TIM1Capture Compare Interrupt*/TIM2_IRQn=28,/*!<TIM2global Interrupt*/TIM3_IRQn=29,/*!<TIM3global Interrupt*/TIM4_IRQn=30,/*!<TIM4global Interrupt*/I2C1_EV_IRQn=31,/*!<I2C1Event Interrupt*/I2C1_ER_IRQn=32,/*!<I2C1Error Interrupt*/I2C2_EV_IRQn=33,/*!<I2C2Event Interrupt*/I2C2_ER_IRQn=34,/*!<I2C2Error Interrupt*/SPI1_IRQn=35,/*!<SPI1global Interrupt*/SPI2_IRQn=36,/*!<SPI2global Interrupt*/ USART1_IRQn=37,/*!<USART1global Interrupt*/ USART2_IRQn=38,/*!<USART2global Interrupt*/ USART3_IRQn=39,/*!<USART3global Interrupt*/ EXTI15_10_IRQn=40,/*!<External Line[15:10]Interrupts*/ RTCAlarm_IRQn=41,/*!<RTC Alarm through EXTI Line Interrupt*/ USBWakeUp_IRQn=42,/*!<USB Device WakeUp from suspend through EXTI Line Interrupt */TIM8_BRK_TIM12_IRQn=43,/*!<TIM8Break Interrupt and TIM12global Interrupt*/ TIM8_UP_TIM13_IRQn=44,/*!<TIM8Update Interrupt and TIM13global Interrupt*/ TIM8_TRG_COM_TIM14_IRQn=45,/*!<TIM8Trigger and Commutation Interrupt and TIM14global interrupt*/TIM8_CC_IRQn=46,/*!<TIM8Capture Compare Interrupt*/ ADC3_IRQn=47,/*!<ADC3global Interrupt*/ FSMC_IRQn=48,/*!<FSMC global Interrupt*/ SDIO_IRQn=49,/*!<SDIO global Interrupt*/TIM5_IRQn=50,/*!<TIM5global Interrupt*/SPI3_IRQn=51,/*!<SPI3global Interrupt*/ UART4_IRQn=52,/*!<UART4global Interrupt*/ UART5_IRQn=53,/*!<UART5global Interrupt*/TIM6_IRQn=54,/*!<TIM6global Interrupt*/TIM7_IRQn=55,/*!<TIM7global Interrupt*/DMA2_Channel1_IRQn=56,/*!<DMA2Channel1global Interrupt*/ DMA2_Channel2_IRQn=57,/*!<DMA2Channel2global Interrupt*/ DMA2_Channel3_IRQn=58,/*!<DMA2Channel3global Interrupt*/ DMA2_Channel4_5_IRQn=59/*!<DMA2Channel4and Channel5global Interrupt*/#endif/*STM32F10X_XL*/#ifdef STM32F10X_CLADC1_2_IRQn=18,/*!<ADC1and ADC2global Interrupt*/ CAN1_TX_IRQn=19,/*!<USB Device High Priority or CAN1TX Interrupts*/ CAN1_RX0_IRQn=20,/*!<USB Device Low Priority or CAN1RX0Interrupts*/ CAN1_RX1_IRQn=21,/*!<CAN1RX1Interrupt*/CAN1_SCE_IRQn=22,/*!<CAN1SCE Interrupt*/EXTI9_5_IRQn=23,/*!<External Line[9:5]Interrupts*/TIM1_BRK_IRQn=24,/*!<TIM1Break Interrupt*/TIM1_UP_IRQn=25,/*!<TIM1Update Interrupt*/TIM1_TRG_COM_IRQn=26,/*!<TIM1Trigger and Commutation Interrupt*/ TIM1_CC_IRQn=27,/*!<TIM1Capture Compare Interrupt*/TIM2_IRQn=28,/*!<TIM2global Interrupt*/TIM3_IRQn=29,/*!<TIM3global Interrupt*/TIM4_IRQn=30,/*!<TIM4global Interrupt*/I2C1_EV_IRQn=31,/*!<I2C1Event Interrupt*/I2C1_ER_IRQn=32,/*!<I2C1Error Interrupt*/I2C2_EV_IRQn=33,/*!<I2C2Event Interrupt*/I2C2_ER_IRQn=34,/*!<I2C2Error Interrupt*/SPI1_IRQn=35,/*!<SPI1global Interrupt*/SPI2_IRQn=36,/*!<SPI2global Interrupt*/ USART1_IRQn=37,/*!<USART1global Interrupt*/ USART2_IRQn=38,/*!<USART2global Interrupt*/ USART3_IRQn=39,/*!<USART3global Interrupt*/ EXTI15_10_IRQn=40,/*!<External Line[15:10]Interrupts*/ RTCAlarm_IRQn=41,/*!<RTC Alarm through EXTI Line Interrupt*/ OTG_FS_WKUP_IRQn=42,/*!<USB OTG FS WakeUp from suspend through EXTI Line Interrupt */TIM5_IRQn=50,/*!<TIM5global Interrupt*/SPI3_IRQn=51,/*!<SPI3global Interrupt*/ UART4_IRQn=52,/*!<UART4global Interrupt*/ UART5_IRQn=53,/*!<UART5global Interrupt*/TIM6_IRQn=54,/*!<TIM6global Interrupt*/TIM7_IRQn=55,/*!<TIM7global Interrupt*/DMA2_Channel1_IRQn=56,/*!<DMA2Channel1global Interrupt*/ DMA2_Channel2_IRQn=57,/*!<DMA2Channel2global Interrupt*/ DMA2_Channel3_IRQn=58,/*!<DMA2Channel3global Interrupt*/ DMA2_Channel4_IRQn=59,/*!<DMA2Channel4global Interrupt*/ DMA2_Channel5_IRQn=60,/*!<DMA2Channel5global Interrupt*/ETH_IRQn=61,/*!<Ethernet global Interrupt*/ ETH_WKUP_IRQn=62,/*!<Ethernet Wakeup through EXTI line Interrupt*/ CAN2_TX_IRQn=63,/*!<CAN2TX Interrupt*/ CAN2_RX0_IRQn=64,/*!<CAN2RX0Interrupt*/ CAN2_RX1_IRQn=65,/*!<CAN2RX1Interrupt*/ CAN2_SCE_IRQn=66,/*!<CAN2SCE Interrupt*/ OTG_FS_IRQn=67/*!<USB OTG FS global Interrupt*/ #endif/*STM32F10X_CL*/}IRQn_Type;。