01. 概述2 C4 s- M0 E. J) z4 t
CM4 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有256 级的可编程中断设置。但 STM32F4 并没有使用 CM4 内核的全部东西,而是只用了它的一部分。
9 g$ ~5 X) G# w7 v c8 [" m( X/ q/ H0 d2 K- b: R
STM32F40xx/STM32F41xx 总共有 92 个中断,STM32F42xx/STM32F43xx 则总共有 96 个中断,STM32F40xx/STM32F41xx 的 92 个中断里面,包括 10 个内核中断和 82 个可屏蔽中断,具有16级可编程的中断优先级,而我们常用的就是这82个可屏蔽中断。
8 G. ` b. }2 v4 X! M; [, [: ]! s* N1 K9 s9 |
02. 结构体声明& Y7 Q# N/ r" a2 x3 H4 K
core_cm4.h文件中- K- f2 [7 h @9 h
$ Q- i, r% s3 @4 \- /** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC).6 a3 l5 G" m$ B" J& b" H. v
- */
# Z( y' U% ], \5 a" G& E) f2 b+ d - typedef struct
' _3 V9 v/ [+ m3 ^, ]/ N' K& H - {: U- y8 {& ?- D, s
- __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */4 c3 V4 c* p( m2 @" J* w" ~8 b) C
- uint32_t RESERVED0[24];
* B3 {" R( j) b! L - __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */, d; ^/ o! y0 I: z' k
- uint32_t RSERVED1[24];% @- I4 C" A( V6 {5 ^5 f
- __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */
' L7 Q0 s7 r: K, x - uint32_t RESERVED2[24];6 E# H1 z# a, l- i7 R
- __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */
: l0 T) W2 O, i - uint32_t RESERVED3[24];7 r0 z$ r9 {0 G" C) h
- __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */
( k1 a4 g1 N7 t+ Y - uint32_t RESERVED4[56];4 _4 v! _* l( |/ ?+ L* F* y, H
- __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */
9 H4 k/ p: I' H9 m( \# y - uint32_t RESERVED5[644];
) A& K( U- @; k) L - __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */
+ J. W+ g( Y4 j: E: Y8 S - } NVIC_Type;
复制代码 ' e2 B* l. g9 K5 T/ N4 r! A
STM32F4 的中断在这些寄存器的控制下有序的执行的。只有了解这些中断寄存器,才能方便的使用 STM32F4 的中断。: D' k/ ~9 H3 x# @
$ b2 R- ]: B& u) ?6 K% w
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 行处。% u- e9 s% L) K8 Q8 k
4 G1 i" [" V) i/ i: |3 B: @
ICER[8]:全称是:Interrupt Clear-Enable Registers,是一个中断除能寄存器组。该寄存器组与 ISER 的作用恰好相反,是用来清除某个中断的使能的。其对应位的功能,也和 ICER 一样。这里要专门设置一个 ICER 来清除中断位,而不是向 ISER 写 0 来清除,是因为 NVIC 的这些寄存器都是写 1 有效的,写 0 是无效的。
+ ]8 X1 _, x, j. o4 s4 c' f e
8 A. F% ^/ t# B- }ISPR[8]:全称是:Interrupt Set-Pending Registers,是一个中断挂起控制寄存器组。每个位对应的中断和 ISER 是一样的。通过置 1,可以将正在进行的中断挂起,而执行同级或更高级别的中断。写 0 是无效的。
1 C0 Z% L4 N5 p( V) s* `1 \! k" q# l: |5 I2 ~
ICPR[8]:全称是:Interrupt Clear-Pending Registers,是一个中断解挂控制寄存器组。其作用与 ISPR 相反,对应位也和 ISER 是一样的。通过设置 1,可以将挂起的中断接挂。写 0 无效。, ~9 P- i5 k% |* Z" G/ E
' S" b4 O. p" d! M9 C `4 ZIABR[8]:全称是:Interrupt Active Bit Registers,是一个中断激活标志位寄存器组。对应位所代表的中断和 ISER 一样,如果为 1,则表示该位所对应的中断正在被执行。这是一个只读寄存器,通过它可以知道当前在执行的中断是哪一个。在中断执行完了由硬件自动清零。
5 L q1 U1 b( M$ k
% ~9 ?# C2 W- W3 rIP[240]:全称是:Interrupt Priority Registers,是一个中断优先级控制的寄存器组。这个寄存器组相当重要!STM32F4 的中断分组与这个寄存器组密切相关。IP 寄存器组由 240 个 8bit的寄存器组成,每个可屏蔽中断占用 8bit,这样总共可以表示 240 个可屏蔽中断。而 STM32F4只用到了其中的 82 个。IP[81]~IP[0]分别对应中断 81~0。而每个可屏蔽中断占用的 8bit 并没有全部使用,而是只用了高 4 位。这 4 位,又分为抢占优先级和响应优先级。抢占优先级在前,响应优先级在后。而这两个优先级各占几个位又要根据 SCB->AIRCR 中的中断分组设置来决定。9 {$ N9 @1 |8 Z( K- K
0 F' s- O+ v [6 a8 m# U3 m8 v3 Y" l: L03. 中断分组9 Y" G2 z4 j: b4 \1 y
STM32F4 将中断分为 5 个组,组 0~4。该分组的设置是由 SCB->AIRCR 寄存器的 bit10~8 来定义的。; `; s; S& ?, ~( h
; f0 @ S! _2 J6 V5 n
5 t9 t) q. j1 Q% a4 ^" }
, T Y [& R1 I }2 H/ O2 h我们就可以清楚的看到组 0~4 对应的配置关系,例如组设置为 3,那么此时所有的 82 个中断,每个中断的中断优先寄存器的高四位中的最高 3 位是抢占优先级,低 1 位是响应优先级。每个中断,你可以设置抢占优先级为 0~7,响应优先级为 1 或 0。抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。# K2 Z2 ?4 T* ^! P. i/ h8 J
+ C) ~; n; t/ V' C% n这里需要注意两点:第一,如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;第二,高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。$ {% @/ a p) V$ g4 u- M
/ h3 E. p$ L. z$ c
结合实例说明一下:假定设置中断优先级组为 2,然后设置中断 3(RTC_WKUP 中断)的抢占优先级为 2,响应优先级为 1。中断 6(外部中断 0)的抢占优先级为 3,响应优先级为 0。中断 7(外部中断 1)的抢占优先级为 2,响应优先级为 0。那么这 3 个中断的优先级顺序为:中断 7>中断 3>中断 6。0 i; u7 z1 T3 L6 W5 I
& F! j2 Y9 Q3 Z8 f0 L上面例子中的中断 3 和中断 7 都可以打断中断 6 的中断。而中断 7 和中断 3 却不可以相互打断!
1 H# p% |" e G/ w7 e- ~
) p( G. m2 K* n6 |) E04. 相关类型
/ D$ J+ @0 W0 ], i& y" n; L. gmisc.h文件% K$ s0 v* T% i. v) B
/ y9 W& H8 Y+ ]4 G* e2 F. q% Y
NVIC_InitTypeDef类型
- P" Z8 O$ i/ W' ^' V( m
- p( I( ~8 K5 G* [& U- /**
- ^6 w& c" A6 ~/ a1 o( I - * @brief NVIC Init Structure definition
4 N! m; m2 n( X* g( k( j: G8 i# } - */- [" i: v S+ r- }/ H" N, f
- * S! Y4 L7 t# m* U
- typedef struct
; \2 @4 K! J4 F' R3 w4 ~% ^2 x - {7 i, ^0 y* f* w1 G
- uint8_t NVIC_IRQChannel; /*!< Specifies the IRQ channel to be enabled or disabled.
6 I" c$ S- P# q+ F g - This parameter can be an enumerator of @ref IRQn_Type 5 `- K) m5 N7 P% Z
- enumeration (For the complete STM32 Devices IRQ Channels
: r" Q# l2 U3 H w - list, please refer to stm32f4xx.h file) */ v% R+ B5 h/ Y/ O" i
9 Z# }9 s! h) U% l9 r/ ^. t) B+ L* ]: P- uint8_t NVIC_IRQChannelPreemptionPriority; /*!< Specifies the pre-emption priority for the IRQ channel3 x0 q- e) b% @, z
- specified in NVIC_IRQChannel. This parameter can be a value
# _$ J) @' C0 g6 R2 D$ u - between 0 and 15 as described in the table @ref MISC_NVIC_Priority_Table
6 A* M& k y4 }) Z( G - A lower priority value indicates a higher priority */+ e X1 G& Q( E! r0 y- t! H ?
6 T1 N8 C8 h- F2 V b- uint8_t NVIC_IRQChannelSubPriority; /*!< Specifies the subpriority level for the IRQ channel specified
7 V V4 [9 y. j: p& t - in NVIC_IRQChannel. This parameter can be a value
: v: U6 a1 M6 t! Y s5 @# f3 E( T - between 0 and 15 as described in the table @ref MISC_NVIC_Priority_Table0 A6 r/ J( B! z8 T- O
- A lower priority value indicates a higher priority */
" r* L: ^- o$ u6 x/ w0 x - $ K) W* t8 h9 S& B7 J
- FunctionalState NVIC_IRQChannelCmd; /*!< Specifies whether the IRQ channel defined in NVIC_IRQChannel& n$ O1 a% Z( ~- @3 j
- will be enabled or disabled. 9 `% R" ~( E& i$ w( @3 P, i
- This parameter can be set either to ENABLE or DISABLE */ ) G, V, F- ?) Y7 R& d4 d+ L
- } NVIC_InitTypeDef;
复制代码 5 N9 H4 P- q! r
MISC_Vector_Table_Base
% y% _9 W& } P/ `( f& Y" k; R/ D% r
- /** @defgroup MISC_Vector_Table_Base
* N( s% \( g2 g t$ M" L+ W - * @{. E6 p1 ?" |2 Q5 C
- */; x+ q. `3 ]8 _: o# T0 o
- * O# }; D3 q$ t) _0 F1 g
- #define NVIC_VectTab_RAM ((uint32_t)0x20000000)
5 ~. [2 Z8 C/ s% F% L8 @ - #define NVIC_VectTab_FLASH ((uint32_t)0x08000000)) M+ d6 a" ]* U: X0 K
- #define IS_NVIC_VECTTAB(VECTTAB) (((VECTTAB) == NVIC_VectTab_RAM) || \
4 N E* r- W5 g2 ] - ((VECTTAB) == NVIC_VectTab_FLASH))
复制代码 6 r" V V1 `1 |
MISC_System_Low_Power
' c* ^: ?6 A3 ?7 z9 O* A; R2 V% z w8 Z4 H) ]
- /** @defgroup MISC_System_Low_Power ( X* O6 U( r* b; @ _
- * @{
! D5 p5 a, W1 t; o) B' A" I - */6 d& I, G1 W5 X' Y, ?
- ~/ r$ p2 V6 r5 s8 ~+ }2 p- #define NVIC_LP_SEVONPEND ((uint8_t)0x10)2 {6 d% G" q( T" o y, k% P2 o. i" \
- #define NVIC_LP_SLEEPDEEP ((uint8_t)0x04)
, r3 r, G! V3 I8 `. @7 _) n2 ?) M - #define NVIC_LP_SLEEPONEXIT ((uint8_t)0x02)
9 l+ z( K; F" @" y5 M - #define IS_NVIC_LP(LP) (((LP) == NVIC_LP_SEVONPEND) || \
+ t- a. K& Q) y3 R - ((LP) == NVIC_LP_SLEEPDEEP) || \, E( t6 P! [2 J2 r' n6 E; ~
- ((LP) == NVIC_LP_SLEEPONEXIT))
复制代码 4 {: H. ~: r1 S1 v9 p
MISC_Preemption_Priority_Group+ r2 K* J2 j& F) P$ @: ?
, \$ Z6 w0 o/ G- S- a* |- /** @defgroup MISC_Preemption_Priority_Group
: `# r& i* Q! h) J" b" P3 g1 Z - * @{
/ L. `( P* o6 A& v# h" A - */
* T% Z2 `+ G; R% x0 D n+ U - 5 t+ T2 {/ S T, R D. h
- #define NVIC_PriorityGroup_0 ((uint32_t)0x700) /*!< 0 bits for pre-emption priority! n1 m0 e* q @4 ^9 V8 A
- 4 bits for subpriority */. z5 d& P& Q) ^/ Y5 i
- #define NVIC_PriorityGroup_1 ((uint32_t)0x600) /*!< 1 bits for pre-emption priority
5 o9 N/ B& N2 e$ J - 3 bits for subpriority */
5 b8 D0 w9 i5 _- `9 o3 U - #define NVIC_PriorityGroup_2 ((uint32_t)0x500) /*!< 2 bits for pre-emption priority
2 |9 }" n ?8 u7 o6 r! r! ~2 @ - 2 bits for subpriority */! N/ E* s4 @- [2 q4 |6 H' |) _
- #define NVIC_PriorityGroup_3 ((uint32_t)0x400) /*!< 3 bits for pre-emption priority
' p0 ?. L0 c2 \# @; V) F* P - 1 bits for subpriority */$ W; H; @7 f3 }& i( T
- #define NVIC_PriorityGroup_4 ((uint32_t)0x300) /*!< 4 bits for pre-emption priority
G. m9 u$ ^3 } - 0 bits for subpriority */) r t% e! e. f) d
9 G/ @: ]$ P% v& Q) o6 k- #define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PriorityGroup_0) || \
0 k, Q, h& r& Z3 o2 ?/ a M# [ - ((GROUP) == NVIC_PriorityGroup_1) || \
9 f/ j! d* I8 ^/ D( j. I - ((GROUP) == NVIC_PriorityGroup_2) || \* ~% n% ^* B& z! u( k, o* K
- ((GROUP) == NVIC_PriorityGroup_3) || \, K( J+ E$ f7 T# w$ L3 k& G$ h
- ((GROUP) == NVIC_PriorityGroup_4))
# U( H. B* \: {4 k6 E - : b, N( f/ `; Y! D+ Q
- #define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY) ((PRIORITY) < 0x10)7 l1 P6 R" w, x5 W
, Y I8 Z8 k0 u& @; f7 B' `- #define IS_NVIC_SUB_PRIORITY(PRIORITY) ((PRIORITY) < 0x10)
: n6 Z& @& r9 D6 t5 i5 ^
6 C4 w+ d, v0 Z6 A/ _; a- #define IS_NVIC_OFFSET(OFFSET) ((OFFSET) < 0x000FFFFF)
复制代码
5 }$ ?, F! a3 [ }! eMISC_SysTick_clock_source- /** @defgroup MISC_SysTick_clock_source
( s/ q! g7 l5 p - * @{4 O. [: \4 G# {9 m% r* V. T0 H
- */, F0 L9 S. Q! K) E4 x7 }
- 5 j2 e8 R" E O2 H2 |7 U
- #define SysTick_CLKSource_HCLK_Div8 ((uint32_t)0xFFFFFFFB)
- O0 B8 [# c `8 r* @/ k - #define SysTick_CLKSource_HCLK ((uint32_t)0x00000004)
3 y- l2 i4 L/ G v - #define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SysTick_CLKSource_HCLK) || \
% R2 G5 W3 Y, q& S5 }9 C2 u$ C - ((SOURCE) == SysTick_CLKSource_HCLK_Div8))
复制代码 Y% l) U+ n2 Q' c4 f
中断名字(stm32f4xx.h)
- d* f% w0 E, Z! i$ t8 U, r( P1 N
% L& H: U: F$ F! Y- /**
9 u! b" W% T; b- j. s - * @brief STM32F4XX Interrupt Number Definition, according to the selected device & V9 t! ^1 k2 N/ c; n5 w
- * in @ref Library_configuration_section # K! r$ A2 ^, K* d2 Y
- */. _' o2 F# d! j# v
- typedef enum IRQn
q$ d& j* D L" u$ h - {1 i b1 w0 n" y" J& F
- /****** Cortex-M4 Processor Exceptions Numbers ****************************************************************/ ?* g. ~$ p& I& v/ N5 q
- NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */9 X( k. ~2 A# O, ~' T5 o
- MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 Memory Management Interrupt *// P: Z {* o* f( {& @$ G4 W4 b
- BusFault_IRQn = -11, /*!< 5 Cortex-M4 Bus Fault Interrupt */
& e+ q( L4 k0 }% \7 E - UsageFault_IRQn = -10, /*!< 6 Cortex-M4 Usage Fault Interrupt */
+ X) o9 [; W6 v, ~$ L - SVCall_IRQn = -5, /*!< 11 Cortex-M4 SV Call Interrupt */
( C ^2 t; `2 |/ I9 |+ s/ C' ~ - DebugMonitor_IRQn = -4, /*!< 12 Cortex-M4 Debug Monitor Interrupt */
4 m m- {9 L8 [% X" Y - PendSV_IRQn = -2, /*!< 14 Cortex-M4 Pend SV Interrupt */
; }# ?6 d& p9 h5 N - SysTick_IRQn = -1, /*!< 15 Cortex-M4 System Tick Interrupt */
^* \( v. _. h# u - /****** STM32 specific Interrupt Numbers **********************************************************************/+ G" E" g- @# ~- E4 Z* s9 _2 {5 P
- WWDG_IRQn = 0, /*!< Window WatchDog Interrupt */
0 k( ^. Y: q1 O# ] - PVD_IRQn = 1, /*!< PVD through EXTI Line detection Interrupt */
# D0 t* V3 p) o8 l4 O - TAMP_STAMP_IRQn = 2, /*!< Tamper and TimeStamp interrupts through the EXTI line */
0 b5 ]! S- J" J( F- @ - RTC_WKUP_IRQn = 3, /*!< RTC Wakeup interrupt through the EXTI line */9 X. f' f; \0 q, C; v. }/ A3 n
- FLASH_IRQn = 4, /*!< FLASH global Interrupt */
1 b* p5 C6 `* o5 ? - RCC_IRQn = 5, /*!< RCC global Interrupt */
/ M0 P, s1 Z/ R0 `, Y/ r; ]/ h3 a. j - EXTI0_IRQn = 6, /*!< EXTI Line0 Interrupt */& n1 S8 V- ~. L& h }" R
- EXTI1_IRQn = 7, /*!< EXTI Line1 Interrupt */
4 g% s' E8 I& l$ z6 U - EXTI2_IRQn = 8, /*!< EXTI Line2 Interrupt */( G) h/ `0 Q' T# }0 @4 x3 ^
- EXTI3_IRQn = 9, /*!< EXTI Line3 Interrupt *// w% v3 H" j( K! _
- EXTI4_IRQn = 10, /*!< EXTI Line4 Interrupt */3 `0 {: Q. \4 m" u4 d* j5 h
- DMA1_Stream0_IRQn = 11, /*!< DMA1 Stream 0 global Interrupt */* F! ~* P* _3 w. C
- DMA1_Stream1_IRQn = 12, /*!< DMA1 Stream 1 global Interrupt */
) f% H8 c+ l' V7 H6 ?0 J' ^2 A5 u# s - DMA1_Stream2_IRQn = 13, /*!< DMA1 Stream 2 global Interrupt */
/ s1 A+ Y" [- ]0 B7 L# o( S - DMA1_Stream3_IRQn = 14, /*!< DMA1 Stream 3 global Interrupt */
7 I: F( Q @0 p, n - DMA1_Stream4_IRQn = 15, /*!< DMA1 Stream 4 global Interrupt */% k H2 T% j' Q' ]
- DMA1_Stream5_IRQn = 16, /*!< DMA1 Stream 5 global Interrupt */
. k M/ l% M2 [. \+ g, G& E - DMA1_Stream6_IRQn = 17, /*!< DMA1 Stream 6 global Interrupt */3 ^3 C9 Y' o" s. V$ N! a/ K7 Z0 B
- ADC_IRQn = 18, /*!< ADC1, ADC2 and ADC3 global Interrupts */
$ H9 h' z1 q1 C- c7 W
& E( V+ k. |6 H- J5 X, w# f' C- #if defined(STM32F40_41xxx)
5 w; e& N% G# C - CAN1_TX_IRQn = 19, /*!< CAN1 TX Interrupt */
, c0 v) ?2 B$ U i6 M x5 e" o - CAN1_RX0_IRQn = 20, /*!< CAN1 RX0 Interrupt */$ c, E: a3 S# e+ {# K
- CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */& b' H L- u; M: |+ _4 U9 ]# I
- CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */1 t# }) d# y& P4 Z: {6 f/ I
- EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */, \" R: F0 s( C r9 D8 R* j; H% B9 f; L9 Y- ]
- TIM1_BRK_TIM9_IRQn = 24, /*!< TIM1 Break interrupt and TIM9 global interrupt */ t7 \, q* c1 A3 \- U' d
- TIM1_UP_TIM10_IRQn = 25, /*!< TIM1 Update Interrupt and TIM10 global interrupt */5 z. P, ]1 T7 q0 R" E! E: K) n
- TIM1_TRG_COM_TIM11_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt and TIM11 global interrupt */* n, w* y, j6 p2 @ n- S
- TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */$ D- F1 q9 b" K9 ]% {/ I) c) L/ b
- TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ F5 [2 O# i' g! L& x8 x. X
- TIM3_IRQn = 29, /*!< TIM3 global Interrupt */
5 L+ n( i$ }: u7 U& j - TIM4_IRQn = 30, /*!< TIM4 global Interrupt */' H4 y& C1 Z# x8 U. ?0 p7 X4 s
- I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */
3 a9 d+ l5 E. f" Z( H - I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */6 x5 [' o- M& @5 Q, A" E! x
- I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */) K. g0 W6 C# R
- I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */
- t9 i* w5 g# }5 l4 b. B - SPI1_IRQn = 35, /*!< SPI1 global Interrupt *// p6 g0 ]/ K+ C" H0 l
- SPI2_IRQn = 36, /*!< SPI2 global Interrupt */; X4 D! S/ Z; b* n0 t$ s
- USART1_IRQn = 37, /*!< USART1 global Interrupt */
) [, ?5 M5 X' \! q# r K - USART2_IRQn = 38, /*!< USART2 global Interrupt */
' @; y4 [2 v) f1 d$ w+ ?2 V3 Z* a) ^ - USART3_IRQn = 39, /*!< USART3 global Interrupt */
( h3 V4 O0 N0 H9 |- I - EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */
' z: e) [( v3 P) ]! T" q3 X1 ? - RTC_Alarm_IRQn = 41, /*!< RTC Alarm (A and B) through EXTI Line Interrupt */6 U3 \# j/ S, p0 b
- OTG_FS_WKUP_IRQn = 42, /*!< USB OTG FS Wakeup through EXTI line interrupt */
6 {, W, R* s! p9 e& x# q/ Q - TIM8_BRK_TIM12_IRQn = 43, /*!< TIM8 Break Interrupt and TIM12 global interrupt */
6 M: A4 c( x1 p. X4 z) V - TIM8_UP_TIM13_IRQn = 44, /*!< TIM8 Update Interrupt and TIM13 global interrupt */( O A( V$ y# X* {- k
- TIM8_TRG_COM_TIM14_IRQn = 45, /*!< TIM8 Trigger and Commutation Interrupt and TIM14 global interrupt */
; s- p4 N/ f, v) c - TIM8_CC_IRQn = 46, /*!< TIM8 Capture Compare Interrupt */, ?8 V0 i1 E8 y# c+ R6 Q
- DMA1_Stream7_IRQn = 47, /*!< DMA1 Stream7 Interrupt */
2 D( r9 F0 |+ X5 A - FSMC_IRQn = 48, /*!< FSMC global Interrupt */
3 ?+ B9 V+ z+ H$ E6 I1 J8 t - SDIO_IRQn = 49, /*!< SDIO global Interrupt */
5 X9 J. y; G; `0 N4 ~% K. E - TIM5_IRQn = 50, /*!< TIM5 global Interrupt */" N; e. _3 ~- {8 t! F8 f
- SPI3_IRQn = 51, /*!< SPI3 global Interrupt */* @1 W4 d1 X9 L
- UART4_IRQn = 52, /*!< UART4 global Interrupt */" u4 ~$ O& p, |8 l
- UART5_IRQn = 53, /*!< UART5 global Interrupt */
- G4 b1 q& s3 t - TIM6_DAC_IRQn = 54, /*!< TIM6 global and DAC1&2 underrun error interrupts */! s3 r K4 _% n
- TIM7_IRQn = 55, /*!< TIM7 global interrupt */8 K. Y' d# |0 q4 ?: O
- DMA2_Stream0_IRQn = 56, /*!< DMA2 Stream 0 global Interrupt */
8 G' o* e2 w, [" Z$ D - DMA2_Stream1_IRQn = 57, /*!< DMA2 Stream 1 global Interrupt */
5 l4 \. w* f! _& P3 M; b4 n5 O - DMA2_Stream2_IRQn = 58, /*!< DMA2 Stream 2 global Interrupt */% u% I, u; _, }5 g9 r: P
- DMA2_Stream3_IRQn = 59, /*!< DMA2 Stream 3 global Interrupt */4 u: c6 `1 _% F: p
- DMA2_Stream4_IRQn = 60, /*!< DMA2 Stream 4 global Interrupt */) g- A! l0 p: E i8 o
- ETH_IRQn = 61, /*!< Ethernet global Interrupt */6 K- [# B+ S; S
- ETH_WKUP_IRQn = 62, /*!< Ethernet Wakeup through EXTI line Interrupt */
8 B6 H, I* s; u5 X. P8 i - CAN2_TX_IRQn = 63, /*!< CAN2 TX Interrupt */+ o, u4 R" U; z: H
- CAN2_RX0_IRQn = 64, /*!< CAN2 RX0 Interrupt */
* d7 T; M4 r. U4 W - CAN2_RX1_IRQn = 65, /*!< CAN2 RX1 Interrupt */
% e+ M' Y) x$ e1 }7 L4 U) Z& x; o - CAN2_SCE_IRQn = 66, /*!< CAN2 SCE Interrupt */
9 L( [8 e) C; o( c3 t - OTG_FS_IRQn = 67, /*!< USB OTG FS global Interrupt */
! f9 R. t5 i; r# C - DMA2_Stream5_IRQn = 68, /*!< DMA2 Stream 5 global interrupt */7 }% ^- e4 E9 c) w
- DMA2_Stream6_IRQn = 69, /*!< DMA2 Stream 6 global interrupt */" F; M1 N% r7 v5 F) g
- DMA2_Stream7_IRQn = 70, /*!< DMA2 Stream 7 global interrupt */
5 c% G: d" H3 ? - USART6_IRQn = 71, /*!< USART6 global interrupt */
# W* _6 x/ u: Y% I - I2C3_EV_IRQn = 72, /*!< I2C3 event interrupt */4 |/ q. |4 j) i8 X! Z
- I2C3_ER_IRQn = 73, /*!< I2C3 error interrupt */
5 L) z4 N7 h5 S, e - OTG_HS_EP1_OUT_IRQn = 74, /*!< USB OTG HS End Point 1 Out global interrupt */
0 v5 y( I3 ?# G5 x - OTG_HS_EP1_IN_IRQn = 75, /*!< USB OTG HS End Point 1 In global interrupt */( k- F, b- \( v" A& Q9 f
- OTG_HS_WKUP_IRQn = 76, /*!< USB OTG HS Wakeup through EXTI interrupt */1 O9 [( ?7 [9 q4 d$ J: t. a
- OTG_HS_IRQn = 77, /*!< USB OTG HS global interrupt */
7 i3 A. O: | t3 O - DCMI_IRQn = 78, /*!< DCMI global interrupt */
% N/ B! o- d6 w! z$ y1 e) l( h - CRYP_IRQn = 79, /*!< CRYP crypto global interrupt */
1 ?" T+ I7 w$ e - HASH_RNG_IRQn = 80, /*!< Hash and Rng global interrupt */( C! ]* `5 m4 t' k5 ?
- FPU_IRQn = 81 /*!< FPU global interrupt */, e- Z- \1 P7 m5 H6 A' N' c6 }
- #endif /* STM32F40_41xxx */
复制代码
1 W6 F, K8 |" m5 ?1 o05. 相关函数, r& K& q; _6 s" L4 j
- /* Exported macro ------------------------------------------------------------*/3 H6 |8 p3 ?* p1 I: m
- /* Exported functions --------------------------------------------------------*/
$ {! E" I3 ?, S
$ d5 ]( O/ P, I' b! b9 a0 j- void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);3 W6 v0 n# Q4 E7 _' p1 l/ {7 J8 [; t
- void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
$ p2 g1 E+ y" W# ]2 O/ S - void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);: T; a7 S( F7 O
- void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState);5 P; w+ }, A" m% K9 V; D( ?+ b
- void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);
复制代码 8 f- I+ t* d, x+ q
, j/ c' |/ @$ {& p7 H# R; o* O4 Q2 T$ F. m$ i/ }0 H
|