01. 概述
% V/ ]9 y8 N( s: V7 m5 t1 UCM4 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有256 级的可编程中断设置。但 STM32F4 并没有使用 CM4 内核的全部东西,而是只用了它的一部分。
% I' k7 ^" H, D) ]' i) _# r
$ N9 C. n& A1 ?2 K, BSTM32F40xx/STM32F41xx 总共有 92 个中断,STM32F42xx/STM32F43xx 则总共有 96 个中断,STM32F40xx/STM32F41xx 的 92 个中断里面,包括 10 个内核中断和 82 个可屏蔽中断,具有16级可编程的中断优先级,而我们常用的就是这82个可屏蔽中断。
& y' o1 v9 \- T5 ^8 O3 w" @ P8 y g; @5 U/ W$ S
02. 结构体声明; x! x Q7 R- A, w) G
core_cm4.h文件中
5 e. B8 t9 B/ q% `, |# R& |
g2 ~ _' X" ?: L" l- /** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC)." Y) m- E8 z. U; d
- */
- y. ?1 g* t D - typedef struct) J! _, B7 u3 }. O9 K5 ]) \
- {. j3 k- `) \5 u+ Z a
- __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */+ v% |: b/ K1 t0 Q( ~3 o& ~
- uint32_t RESERVED0[24];( w( R8 W( h: B9 [! f1 u
- __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */9 Y7 J, X$ T' x7 o$ [
- uint32_t RSERVED1[24];# m1 w0 ^1 i0 u3 S% L
- __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */
* I+ j0 @9 _- i4 k - uint32_t RESERVED2[24];+ s, B; f1 n0 \0 g' M9 C
- __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */( i; t* b6 p9 S0 {5 O! i
- uint32_t RESERVED3[24]; T* V7 J. f$ o4 E
- __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */
/ c E1 U' Q+ i) M( _/ d - uint32_t RESERVED4[56];
; W' o% g; M; o% R9 A J4 | - __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) *// Q$ B$ P( }# _7 m& g5 X
- uint32_t RESERVED5[644];
7 o# e+ Q) l8 m# g9 V" H8 Y1 _ - __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */
" n0 V! U0 f0 f' m - } NVIC_Type;
复制代码 6 q4 }1 ]; T) w
STM32F4 的中断在这些寄存器的控制下有序的执行的。只有了解这些中断寄存器,才能方便的使用 STM32F4 的中断。
5 t0 y D& q: E/ m) N' g0 B+ S9 @7 T& h& k& N
ISER[8]:ISER 全称是:Interrupt Set-Enable Registers,这是一个中断使能寄存器组。上面说了 CM4 内核支持 256 个中断,这里用 8 个 32 位寄存器来控制,每个位控制一个中断。但是STM32F4 的可屏蔽中断最多只有 82 个,所以对我们来说,有用的就是三个(ISER[0~2]),总共可以表示 96 个中断。而 STM32F4 只用了其中的前 82 个。ISER[0]的 bit0~31 分别对应中断0~31;ISER[1]的 bit0~32 对应中断 32~63;ISER[2]的 bit0~17 对应中断 64~81;这样总共 82 个中断就分别对应上了。你要使能某个中断,必须设置相应的 ISER 位为 1,使该中断被使能(这里仅仅是使能,还要配合中断分组、屏蔽、IO 口映射等设置才算是一个完整的中断设置)。具体每一位对应哪个中断,请参考 stm32f4xx.h 里面的第 188 行处。8 W/ K2 P$ E+ [5 o, q9 k
5 d& p7 M4 F/ j2 L" S6 m! wICER[8]:全称是:Interrupt Clear-Enable Registers,是一个中断除能寄存器组。该寄存器组与 ISER 的作用恰好相反,是用来清除某个中断的使能的。其对应位的功能,也和 ICER 一样。这里要专门设置一个 ICER 来清除中断位,而不是向 ISER 写 0 来清除,是因为 NVIC 的这些寄存器都是写 1 有效的,写 0 是无效的。
8 X$ U+ u4 f# H/ t" O
* m. @3 d- p* q( ]1 w9 {5 vISPR[8]:全称是:Interrupt Set-Pending Registers,是一个中断挂起控制寄存器组。每个位对应的中断和 ISER 是一样的。通过置 1,可以将正在进行的中断挂起,而执行同级或更高级别的中断。写 0 是无效的。5 m8 @: W1 O# m
9 j! f8 J% t( q6 c5 `' q
ICPR[8]:全称是:Interrupt Clear-Pending Registers,是一个中断解挂控制寄存器组。其作用与 ISPR 相反,对应位也和 ISER 是一样的。通过设置 1,可以将挂起的中断接挂。写 0 无效。
1 j) `) C( z/ a
8 ~' l9 q+ X1 }( ~; y5 p' tIABR[8]:全称是:Interrupt Active Bit Registers,是一个中断激活标志位寄存器组。对应位所代表的中断和 ISER 一样,如果为 1,则表示该位所对应的中断正在被执行。这是一个只读寄存器,通过它可以知道当前在执行的中断是哪一个。在中断执行完了由硬件自动清零。/ l& f7 C3 T' [* x" T) C5 z
5 b R0 ?2 |- ^& }2 C8 C6 T$ @: K: G
IP[240]:全称是:Interrupt Priority Registers,是一个中断优先级控制的寄存器组。这个寄存器组相当重要!STM32F4 的中断分组与这个寄存器组密切相关。IP 寄存器组由 240 个 8bit的寄存器组成,每个可屏蔽中断占用 8bit,这样总共可以表示 240 个可屏蔽中断。而 STM32F4只用到了其中的 82 个。IP[81]~IP[0]分别对应中断 81~0。而每个可屏蔽中断占用的 8bit 并没有全部使用,而是只用了高 4 位。这 4 位,又分为抢占优先级和响应优先级。抢占优先级在前,响应优先级在后。而这两个优先级各占几个位又要根据 SCB->AIRCR 中的中断分组设置来决定。
/ E! m E6 R' x) e. ?+ M5 u8 I7 y0 ?% g6 U
03. 中断分组
7 v0 ]; h1 v( n+ X8 NSTM32F4 将中断分为 5 个组,组 0~4。该分组的设置是由 SCB->AIRCR 寄存器的 bit10~8 来定义的。) f2 c2 j9 B- P
) {6 K- h* \) A2 l- V: N
0 Z/ H0 v8 V4 F! Y/ }4 o8 Z3 a. L. ~
9 U- F0 |. S! ^; P! b+ f; H我们就可以清楚的看到组 0~4 对应的配置关系,例如组设置为 3,那么此时所有的 82 个中断,每个中断的中断优先寄存器的高四位中的最高 3 位是抢占优先级,低 1 位是响应优先级。每个中断,你可以设置抢占优先级为 0~7,响应优先级为 1 或 0。抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。0 U' b2 T$ h7 f1 Y' I5 n
% V/ G+ @8 s3 I2 ^( M8 L这里需要注意两点:第一,如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;第二,高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。0 s y2 D/ \9 {2 R
0 e* ^ x' x( ], |% ]% ^( \结合实例说明一下:假定设置中断优先级组为 2,然后设置中断 3(RTC_WKUP 中断)的抢占优先级为 2,响应优先级为 1。中断 6(外部中断 0)的抢占优先级为 3,响应优先级为 0。中断 7(外部中断 1)的抢占优先级为 2,响应优先级为 0。那么这 3 个中断的优先级顺序为:中断 7>中断 3>中断 6。6 ?' m+ \5 A% J! s8 X1 \- @
: {# \1 Q& e% `9 U: \& c
上面例子中的中断 3 和中断 7 都可以打断中断 6 的中断。而中断 7 和中断 3 却不可以相互打断!
5 q& ?: D6 Z0 e& W4 O) x6 ]3 Z1 G) r
04. 相关类型; C7 X* ^& O" s! k: ]$ a
misc.h文件
. M; i3 Y5 J- F4 H1 N- z
5 E) T- C h; h3 T( i+ yNVIC_InitTypeDef类型
+ c$ }) Z5 s# n6 t/ x. W
3 S8 ]* t' q- i. s: I: R- /** , B0 C7 E: M' L$ \. B
- * @brief NVIC Init Structure definition 3 Y/ H" s2 R. J0 a) B' c9 }% H3 R
- */6 ] p& J, Z+ `# f- K0 o9 s# L
: w. l- {7 {; a& Z3 N! K- typedef struct n5 D. m6 Q6 S; _
- { O6 `3 I/ D! g, l6 c
- uint8_t NVIC_IRQChannel; /*!< Specifies the IRQ channel to be enabled or disabled.% R0 s1 g+ L/ M4 ]
- This parameter can be an enumerator of @ref IRQn_Type - f( N* s* d% v
- enumeration (For the complete STM32 Devices IRQ Channels
7 F/ s, x! y6 `+ u2 S7 X" d - list, please refer to stm32f4xx.h file) */: |/ H5 g R I* R
- . V" E6 e; u7 U' r+ K; A9 c
- uint8_t NVIC_IRQChannelPreemptionPriority; /*!< Specifies the pre-emption priority for the IRQ channel# k2 ?. \& V3 _
- specified in NVIC_IRQChannel. This parameter can be a value
, L* d3 h5 q( j. I4 ?$ e% o6 E - between 0 and 15 as described in the table @ref MISC_NVIC_Priority_Table
5 ~: R$ n! [7 b - A lower priority value indicates a higher priority */3 ~, }7 u6 X4 p4 B' |$ p
$ U# x# F T* r& A, V- uint8_t NVIC_IRQChannelSubPriority; /*!< Specifies the subpriority level for the IRQ channel specified
s5 o9 [- k2 k2 } - in NVIC_IRQChannel. This parameter can be a value1 z X! b" {3 E$ m0 P: c
- between 0 and 15 as described in the table @ref MISC_NVIC_Priority_Table
2 V+ U) w, K5 w8 g6 J6 y* a - A lower priority value indicates a higher priority */
4 X4 S1 F5 L$ |
, S* t) N3 y* T, a: W6 B- FunctionalState NVIC_IRQChannelCmd; /*!< Specifies whether the IRQ channel defined in NVIC_IRQChannel1 B% Q8 I! p" Y3 Y; e! b! |
- will be enabled or disabled. 1 k# T S' f4 e+ O
- This parameter can be set either to ENABLE or DISABLE */ _: z% F7 O. d
- } NVIC_InitTypeDef;
复制代码
, }6 o% Y8 I9 s p4 ^MISC_Vector_Table_Base- /** @defgroup MISC_Vector_Table_Base
: v; k. T- D3 Q/ }- ^9 g - * @{/ W7 i0 I+ F: J3 `7 c7 z5 C
- */5 C( W: T* w! | {7 w+ J; M
- ) h9 z' Z# L5 e% Z4 L. c# N
- #define NVIC_VectTab_RAM ((uint32_t)0x20000000)
6 j* E8 L" d; A' H- Q - #define NVIC_VectTab_FLASH ((uint32_t)0x08000000)1 A: ?+ z1 ^( q2 ]
- #define IS_NVIC_VECTTAB(VECTTAB) (((VECTTAB) == NVIC_VectTab_RAM) || \3 E3 Y" p( A) e' J3 y
- ((VECTTAB) == NVIC_VectTab_FLASH))
复制代码 8 _! l- d. }1 `5 {' N
MISC_System_Low_Power
+ ~. H1 { G% [6 S ^& R
1 G1 S1 O! c- Q* Z- /** @defgroup MISC_System_Low_Power 9 m4 _) [7 K! g8 X' r
- * @{6 Y6 Q( M% N2 \: `! o
- */% [3 F3 O2 ^3 o) Q
6 |6 H' F b& L0 {# _- #define NVIC_LP_SEVONPEND ((uint8_t)0x10)
9 G% W9 Y6 Z' }9 L6 v" R - #define NVIC_LP_SLEEPDEEP ((uint8_t)0x04)# B7 Z! p8 z9 p
- #define NVIC_LP_SLEEPONEXIT ((uint8_t)0x02)! @: d( Q& {2 t, A+ J# K) V
- #define IS_NVIC_LP(LP) (((LP) == NVIC_LP_SEVONPEND) || \
8 v/ }2 ~2 s+ i, E: c' H - ((LP) == NVIC_LP_SLEEPDEEP) || \
: m' i( }& p1 N: ]% O - ((LP) == NVIC_LP_SLEEPONEXIT))
复制代码
$ A- V3 H( Q) I* @MISC_Preemption_Priority_Group
9 k! E8 Q; k# T( D1 M I. V; m3 q! u. l: G# \+ {3 @- K
- /** @defgroup MISC_Preemption_Priority_Group
: ?9 M# @1 U# Y m5 G# W, T ~1 F' ^ - * @{
4 ]( E7 V. r: R5 D - */
3 m1 s4 r6 ]+ d U; K8 _& K - l/ ~$ {1 M# c) F# J' ~7 R/ J
- #define NVIC_PriorityGroup_0 ((uint32_t)0x700) /*!< 0 bits for pre-emption priority
9 e3 {9 u8 M r. r - 4 bits for subpriority */. F- W# [4 Z% r/ B
- #define NVIC_PriorityGroup_1 ((uint32_t)0x600) /*!< 1 bits for pre-emption priority% z5 t8 s* v* i- g: J
- 3 bits for subpriority */
0 _" a$ Q( }$ V) F* ^9 [ - #define NVIC_PriorityGroup_2 ((uint32_t)0x500) /*!< 2 bits for pre-emption priority
4 L/ `5 t2 Q& q - 2 bits for subpriority */1 ]! D! w- D- i4 X5 }* n, D
- #define NVIC_PriorityGroup_3 ((uint32_t)0x400) /*!< 3 bits for pre-emption priority
" ~. f8 E( N; T" i; F - 1 bits for subpriority */
% F6 z! V5 S% ^6 r; G4 @ - #define NVIC_PriorityGroup_4 ((uint32_t)0x300) /*!< 4 bits for pre-emption priority5 D7 \4 T8 p% n
- 0 bits for subpriority */4 N8 x6 [$ |; D
w6 G7 s2 g4 t" S4 S q J- #define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PriorityGroup_0) || \4 T+ \( N! j, I% P7 i
- ((GROUP) == NVIC_PriorityGroup_1) || \! Q* l& Z( `+ t' f! N
- ((GROUP) == NVIC_PriorityGroup_2) || \
; A5 q7 N# A n, X+ V - ((GROUP) == NVIC_PriorityGroup_3) || \
! h" [7 q" t( M* X! F+ Y3 [8 b+ ] - ((GROUP) == NVIC_PriorityGroup_4))
. d* w1 q% ]$ `' i - ; ~- P: ~9 j7 a$ W3 }7 m3 f8 ~# o( y) g
- #define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY) ((PRIORITY) < 0x10)3 v3 T) [- G4 a
1 T+ c% r! t/ r- #define IS_NVIC_SUB_PRIORITY(PRIORITY) ((PRIORITY) < 0x10)
. r. j* j+ R2 W( n, M4 g; K' D - ' g5 _/ `* C. G0 \
- #define IS_NVIC_OFFSET(OFFSET) ((OFFSET) < 0x000FFFFF)
复制代码 , B2 F. y, b( ^( j4 R J5 r
MISC_SysTick_clock_sourc
: J9 J& P& d* j! a& Z' ^
, [& z8 a8 i6 V- /** @defgroup MISC_SysTick_clock_source 1 l5 I, R# g& E1 S5 m9 Z( @0 q# ]
- * @{
( _; Q L) E: ?/ v3 V - */
7 D9 |* b& J9 z9 ]! M. G, L
, q. d: ^ S) t, P9 ~- #define SysTick_CLKSource_HCLK_Div8 ((uint32_t)0xFFFFFFFB)& U# ]1 ?; z2 r4 a+ f! V/ d
- #define SysTick_CLKSource_HCLK ((uint32_t)0x00000004)
' d, y5 k2 J, y* a - #define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SysTick_CLKSource_HCLK) || \: c e# k8 W6 b: I7 E
- ((SOURCE) == SysTick_CLKSource_HCLK_Div8))
1 W6 ]0 P, f1 f0 U0 e3 F' K: }2 F
复制代码
! {+ }& E+ ?7 D7 t4 X( q$ R中断名字(stm32f4xx.h)
# q+ Q4 @" N0 e( o- V' p
6 x1 X. C) N: R( W1 H" ?- /*** ~ p1 c! X e+ A
- * @brief STM32F4XX Interrupt Number Definition, according to the selected device & }1 S$ Z2 s) G/ ^$ K
- * in @ref Library_configuration_section " Q X7 s0 }) u& |% c, v% b# W0 N/ ~
- */
4 j7 Y& K; v. U- i - typedef enum IRQn+ `. b( K2 p9 ~! I, f
- {; K v% t* P4 K- s
- /****** Cortex-M4 Processor Exceptions Numbers ****************************************************************/
4 ` M5 H) u W3 N! i - NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */
# M- S6 C7 Y& e- i5 Z) p) U% Q' l - MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 Memory Management Interrupt */
/ R9 j/ N1 ^0 L2 d- V - BusFault_IRQn = -11, /*!< 5 Cortex-M4 Bus Fault Interrupt */' l3 N8 P Z3 _" n2 q
- UsageFault_IRQn = -10, /*!< 6 Cortex-M4 Usage Fault Interrupt */# u. c1 k! v' ]% z4 o8 \) Z8 V3 c6 G5 y
- SVCall_IRQn = -5, /*!< 11 Cortex-M4 SV Call Interrupt */
* G$ s `. K6 Y) W! H - DebugMonitor_IRQn = -4, /*!< 12 Cortex-M4 Debug Monitor Interrupt */
% g; B. K. `; a ^ - PendSV_IRQn = -2, /*!< 14 Cortex-M4 Pend SV Interrupt */6 B" D4 s+ t9 Y+ }
- SysTick_IRQn = -1, /*!< 15 Cortex-M4 System Tick Interrupt */. l, k5 f7 c% n4 x
- /****** STM32 specific Interrupt Numbers **********************************************************************/9 L" g/ f Q! k1 _
- WWDG_IRQn = 0, /*!< Window WatchDog Interrupt */1 j9 ]/ M* _, F0 D# O
- PVD_IRQn = 1, /*!< PVD through EXTI Line detection Interrupt */
' T/ ~' S) ^4 E' F7 }1 R3 B - TAMP_STAMP_IRQn = 2, /*!< Tamper and TimeStamp interrupts through the EXTI line */, K3 o. t" Z k! _1 L5 w. e$ V1 G/ c
- RTC_WKUP_IRQn = 3, /*!< RTC Wakeup interrupt through the EXTI line */
" G( a; _2 n0 H8 j* S* p - FLASH_IRQn = 4, /*!< FLASH global Interrupt */. p7 u6 x3 F) h# a3 O& Y
- RCC_IRQn = 5, /*!< RCC global Interrupt */$ a: ^% F. Z& Q2 L7 r2 N
- EXTI0_IRQn = 6, /*!< EXTI Line0 Interrupt */5 M# A6 d% Y; ]2 b; h- k+ D4 S
- EXTI1_IRQn = 7, /*!< EXTI Line1 Interrupt */
* |3 o5 K$ d8 q( N3 U) K: h$ C - EXTI2_IRQn = 8, /*!< EXTI Line2 Interrupt */9 h. G9 h/ _/ }7 r6 f4 j4 W
- EXTI3_IRQn = 9, /*!< EXTI Line3 Interrupt */
/ }' L- i0 s* G7 D+ u$ g9 W - EXTI4_IRQn = 10, /*!< EXTI Line4 Interrupt */7 R: E+ X# s+ h: U) e$ u$ \
- DMA1_Stream0_IRQn = 11, /*!< DMA1 Stream 0 global Interrupt */
( y Y0 y( N3 `3 w; e9 i0 k5 P+ H - DMA1_Stream1_IRQn = 12, /*!< DMA1 Stream 1 global Interrupt */* b* n* y U W/ D- o
- DMA1_Stream2_IRQn = 13, /*!< DMA1 Stream 2 global Interrupt */
C( g6 v) W9 H2 j - DMA1_Stream3_IRQn = 14, /*!< DMA1 Stream 3 global Interrupt */* {8 C5 f6 ]- n b4 t/ V
- DMA1_Stream4_IRQn = 15, /*!< DMA1 Stream 4 global Interrupt */" x8 d: n$ d3 I0 B, H
- DMA1_Stream5_IRQn = 16, /*!< DMA1 Stream 5 global Interrupt */
7 W& L6 i5 N5 e) ~; T0 F - DMA1_Stream6_IRQn = 17, /*!< DMA1 Stream 6 global Interrupt */3 U) t% B& O8 Q7 F, `
- ADC_IRQn = 18, /*!< ADC1, ADC2 and ADC3 global Interrupts */$ ]0 g# V+ G9 I3 _ S8 o
" B) o' V2 k4 a+ [* h, L* R- #if defined(STM32F40_41xxx)
# \. @( ~# n- C8 j' a - CAN1_TX_IRQn = 19, /*!< CAN1 TX Interrupt */ ?+ I: F2 x3 d& N; B h
- CAN1_RX0_IRQn = 20, /*!< CAN1 RX0 Interrupt */
9 O3 o g+ M5 R. u0 J - CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */! }$ y6 C; q6 o( g U" l
- CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */7 C. o" S7 `& a3 L4 m) r
- EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */0 d) Y2 Z, Z) Y, F- d7 p
- TIM1_BRK_TIM9_IRQn = 24, /*!< TIM1 Break interrupt and TIM9 global interrupt */
/ D7 z' E1 G- l, }, n7 Z+ A - TIM1_UP_TIM10_IRQn = 25, /*!< TIM1 Update Interrupt and TIM10 global interrupt */- K, i8 r* ?: f6 X
- TIM1_TRG_COM_TIM11_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt and TIM11 global interrupt */ d6 f4 A L1 u3 M
- TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */
n; ]' c( e, o - TIM2_IRQn = 28, /*!< TIM2 global Interrupt */
* u; X! y- I4 n - TIM3_IRQn = 29, /*!< TIM3 global Interrupt */
* F/ e% |! `9 q$ w4 o - TIM4_IRQn = 30, /*!< TIM4 global Interrupt */
0 f: ]( b# z, K; A8 N - I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */& w% F) }+ |, |- g* e( c
- I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */
: j# U9 Y; b! c0 \, L+ k - I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */) m0 I) V) H3 i5 I
- I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */! J" Q3 q0 a9 R% D+ Z$ w
- SPI1_IRQn = 35, /*!< SPI1 global Interrupt */; C$ ~$ K% I6 u w3 M
- SPI2_IRQn = 36, /*!< SPI2 global Interrupt */8 N- M; ~, V2 _% {8 u
- USART1_IRQn = 37, /*!< USART1 global Interrupt */9 }; U' w4 W8 F8 ?0 K5 r) |7 E/ \
- USART2_IRQn = 38, /*!< USART2 global Interrupt */
# B6 `9 J. m3 l( u6 |& j! F - USART3_IRQn = 39, /*!< USART3 global Interrupt */0 l3 G3 \: b# J5 W4 R
- EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */
, u7 N+ n/ n/ \7 B, w5 s - RTC_Alarm_IRQn = 41, /*!< RTC Alarm (A and B) through EXTI Line Interrupt */
1 x. ~$ ^- G6 C2 O& Y' Q- _$ p - OTG_FS_WKUP_IRQn = 42, /*!< USB OTG FS Wakeup through EXTI line interrupt */! _& T1 s! X8 s" O( a& A
- TIM8_BRK_TIM12_IRQn = 43, /*!< TIM8 Break Interrupt and TIM12 global interrupt */" o5 M* v u! U) h' u5 c" R
- TIM8_UP_TIM13_IRQn = 44, /*!< TIM8 Update Interrupt and TIM13 global interrupt */6 t) z( c7 j; S7 s: q
- TIM8_TRG_COM_TIM14_IRQn = 45, /*!< TIM8 Trigger and Commutation Interrupt and TIM14 global interrupt */
, ^) H) k5 L/ U8 m3 y+ i8 f5 Q - TIM8_CC_IRQn = 46, /*!< TIM8 Capture Compare Interrupt */6 M/ L, I' P7 e J
- DMA1_Stream7_IRQn = 47, /*!< DMA1 Stream7 Interrupt */+ u+ F+ p4 q8 p4 D1 w h
- FSMC_IRQn = 48, /*!< FSMC global Interrupt */ F' z8 ~8 D/ F
- SDIO_IRQn = 49, /*!< SDIO global Interrupt */
& E4 h8 H5 F+ e4 \% ^8 v - TIM5_IRQn = 50, /*!< TIM5 global Interrupt */1 G' Y, N4 m8 R% I
- SPI3_IRQn = 51, /*!< SPI3 global Interrupt */
6 C* W' j) N9 A$ R- t! a - UART4_IRQn = 52, /*!< UART4 global Interrupt */+ T+ \, w# Z8 @
- UART5_IRQn = 53, /*!< UART5 global Interrupt *// S# W5 u I1 k) N2 e0 s
- TIM6_DAC_IRQn = 54, /*!< TIM6 global and DAC1&2 underrun error interrupts */' h- A) k4 a& E6 |% v' t
- TIM7_IRQn = 55, /*!< TIM7 global interrupt */
2 F1 P _8 D3 |" g* { - DMA2_Stream0_IRQn = 56, /*!< DMA2 Stream 0 global Interrupt */
6 c* f3 r* ^- u: c - DMA2_Stream1_IRQn = 57, /*!< DMA2 Stream 1 global Interrupt */
* n$ P9 Y7 H, T - DMA2_Stream2_IRQn = 58, /*!< DMA2 Stream 2 global Interrupt */" [9 D4 R' L9 B: _4 Y
- DMA2_Stream3_IRQn = 59, /*!< DMA2 Stream 3 global Interrupt */
- G4 n9 ]+ `8 W - DMA2_Stream4_IRQn = 60, /*!< DMA2 Stream 4 global Interrupt */9 i- i9 \% d0 _3 H
- ETH_IRQn = 61, /*!< Ethernet global Interrupt */
% q" f$ m) @ R& N3 ? - ETH_WKUP_IRQn = 62, /*!< Ethernet Wakeup through EXTI line Interrupt */
1 v/ |( t. N. A, t/ d - CAN2_TX_IRQn = 63, /*!< CAN2 TX Interrupt */ W6 P* ^9 [5 q
- CAN2_RX0_IRQn = 64, /*!< CAN2 RX0 Interrupt */
[2 p* z* i( d* m5 } - CAN2_RX1_IRQn = 65, /*!< CAN2 RX1 Interrupt */
3 c' D7 g7 O5 H. x# J0 j1 e - CAN2_SCE_IRQn = 66, /*!< CAN2 SCE Interrupt */2 l) n- _! r# G o0 }
- OTG_FS_IRQn = 67, /*!< USB OTG FS global Interrupt */0 q" l4 a- \7 o& p% @( z' v
- DMA2_Stream5_IRQn = 68, /*!< DMA2 Stream 5 global interrupt */
; Q" h @4 S# K: }- `4 Q; Y) ` - DMA2_Stream6_IRQn = 69, /*!< DMA2 Stream 6 global interrupt */
( p) X s( a$ G8 a$ l6 c1 n - DMA2_Stream7_IRQn = 70, /*!< DMA2 Stream 7 global interrupt */
u9 T r# d& E8 V+ q4 r - USART6_IRQn = 71, /*!< USART6 global interrupt */6 u7 S; I1 S C" f w" ~
- I2C3_EV_IRQn = 72, /*!< I2C3 event interrupt */) x; S* k9 U1 e+ F3 {) ]: T8 I
- I2C3_ER_IRQn = 73, /*!< I2C3 error interrupt */
8 y; B" I; f; U. x - OTG_HS_EP1_OUT_IRQn = 74, /*!< USB OTG HS End Point 1 Out global interrupt */
9 U% M6 K, E; k7 Y. B' Q& U7 u - OTG_HS_EP1_IN_IRQn = 75, /*!< USB OTG HS End Point 1 In global interrupt */
5 l% Z1 z# r4 J3 ^+ [7 x0 L2 X" L - OTG_HS_WKUP_IRQn = 76, /*!< USB OTG HS Wakeup through EXTI interrupt */4 x# Z3 X6 @) k
- OTG_HS_IRQn = 77, /*!< USB OTG HS global interrupt */# ?; X; n! W: @+ }, u0 [; X
- DCMI_IRQn = 78, /*!< DCMI global interrupt */% F* F, N. o+ l3 x) {9 |( b
- CRYP_IRQn = 79, /*!< CRYP crypto global interrupt */
, q7 K/ X" e+ U2 n7 g* q - HASH_RNG_IRQn = 80, /*!< Hash and Rng global interrupt */) d( `3 v# I2 a& [+ R* G, h
- FPU_IRQn = 81 /*!< FPU global interrupt */
: D9 W/ K t1 X( d4 B) I" z - #endif /* STM32F40_41xxx */
复制代码
- @+ ] h( L" Y1 W' y0 x n' ~05. 相关函数. f/ [- L3 ~$ }# D
- /* Exported macro ------------------------------------------------------------*/
' y0 L G$ G' w2 H7 y+ S7 G: s - /* Exported functions --------------------------------------------------------*/; K+ I7 m2 c. b# l& \
- 4 o2 f; r$ @% `' q) |* E+ y8 R; A
- void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
1 F0 V2 E& \! D% D0 ~ - void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
' d" |( `+ x0 p( u) Z - void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);
, z: D7 m3 V# A4 S - void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState);
w+ W+ o2 ]5 j# F# J7 Z - void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);
复制代码
, z# L( G# S r- x5 t4 ?* b; y6 i
|