你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32 中断优先级管理

[复制链接]
STMCU小助手 发布时间:2022-4-1 15:20
01. 概述8 z" C1 H! V0 J/ V
CM4 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有256 级的可编程中断设置。但 STM32F4 并没有使用 CM4 内核的全部东西,而是只用了它的一部分。
: t1 s+ C4 L( `( ]
; Q1 y# G2 d" g( ]STM32F40xx/STM32F41xx 总共有 92 个中断,STM32F42xx/STM32F43xx 则总共有 96 个中断,STM32F40xx/STM32F41xx 的 92 个中断里面,包括 10 个内核中断和 82 个可屏蔽中断,具有16级可编程的中断优先级,而我们常用的就是这82个可屏蔽中断。# w- A6 N8 Z# f. T- D* a8 _
9 ?  s$ f% X+ b  y0 e5 f- b
02. 结构体声明7 _! P( s7 B/ b2 U6 _; Z$ A
core_cm4.h文件中
5 c2 W% u) N$ d8 M& |
) R" O( K7 K: `. `# |, G& o
  1. /** \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).
    0 k. A, h, X3 ~0 R
  2. */2 M& ?& l5 ^' E# U" I: h
  3. typedef struct
    9 u2 T/ j0 g* `  B0 r8 F
  4. {% m& B! x0 T4 c0 X& D4 Q( R- j* V
  5.   __IO uint32_t ISER[8];                 /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register           */+ O% z' x6 A& d* o! J
  6.        uint32_t RESERVED0[24];
    0 V0 O2 Y+ I6 z# W* M3 T% \5 o. c
  7.   __IO uint32_t ICER[8];                 /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register         */" J' t, @7 \% U. }
  8.        uint32_t RSERVED1[24];
    : M$ l! B% m9 x! i, z
  9.   __IO uint32_t ISPR[8];                 /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register          */
    - n3 a: C1 [4 @) d* N4 t
  10.        uint32_t RESERVED2[24];: |  d. y& ]5 T/ i7 v; }; Z! N
  11.   __IO uint32_t ICPR[8];                 /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register        */  Y2 Q% f# F" c0 h3 k/ I
  12.        uint32_t RESERVED3[24];$ ?& W# r% S( N
  13.   __IO uint32_t IABR[8];                 /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register           */4 z7 v: O7 s. ~6 ?" V
  14.        uint32_t RESERVED4[56];- U# X% t/ }# W6 S* H+ ?
  15.   __IO uint8_t  IP[240];                 /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) */0 e+ T, q5 c# `2 O! i5 p& Q2 P$ b7 l" i9 E
  16.        uint32_t RESERVED5[644];
    + w: S* t: C( {
  17.   __O  uint32_t STIR;                    /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register     */- i2 O  B+ S% o: E3 }6 y
  18. }  NVIC_Type;
复制代码

8 T  r, h/ ?4 i; FSTM32F4 的中断在这些寄存器的控制下有序的执行的。只有了解这些中断寄存器,才能方便的使用 STM32F4 的中断。
8 i$ |/ z9 p* h3 v. q; R
" G* `. l; X7 D5 g  a- i! DISER[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 行处。
  r- Q5 N0 H9 C3 Q' f
4 V" f/ G" K' c# {7 Y" t+ M/ `1 hICER[8]:
全称是:Interrupt Clear-Enable Registers,是一个中断除能寄存器组。该寄存器组与 ISER 的作用恰好相反,是用来清除某个中断的使能的。其对应位的功能,也和 ICER 一样。这里要专门设置一个 ICER 来清除中断位,而不是向 ISER 写 0 来清除,是因为 NVIC 的这些寄存器都是写 1 有效的,写 0 是无效的。
9 z: K% i+ y  a# [& X8 p+ Q" K$ h) e" }  e! }- F" {
ISPR[8]:全称是:Interrupt Set-Pending Registers,是一个中断挂起控制寄存器组。每个位对应的中断和 ISER 是一样的。通过置 1,可以将正在进行的中断挂起,而执行同级或更高级别的中断。写 0 是无效的。
" S, w" o! i: V, |% Z) ?/ {
/ z7 K+ L) C1 |: ZICPR[8]:全称是:Interrupt Clear-Pending Registers,是一个中断解挂控制寄存器组。其作用与 ISPR 相反,对应位也和 ISER 是一样的。通过设置 1,可以将挂起的中断接挂。写 0 无效。3 B: [' L) Y# m2 e

1 d6 K3 F: e' o, j' M# X3 B$ M9 _IABR[8]:全称是:Interrupt Active Bit Registers,是一个中断激活标志位寄存器组。对应位所代表的中断和 ISER 一样,如果为 1,则表示该位所对应的中断正在被执行。这是一个只读寄存器,通过它可以知道当前在执行的中断是哪一个。在中断执行完了由硬件自动清零。5 Q! T; d% W3 E" e- f

0 y: P2 O* x8 H& x: @IP[240]:全称是:Interrupt Priority Registers,是一个中断优先级控制的寄存器组。这个寄存器组相当重要!STM32F4 的中断分组与这个寄存器组密切相关。IP 寄存器组由 240 个 8bit的寄存器组成,每个可屏蔽中断占用 8bit,这样总共可以表示 240 个可屏蔽中断。而 STM32F4只用到了其中的 82 个。IP[81]~IP[0]分别对应中断 81~0。而每个可屏蔽中断占用的 8bit 并没有全部使用,而是只用了高 4 位。这 4 位,又分为抢占优先级和响应优先级。抢占优先级在前,响应优先级在后。而这两个优先级各占几个位又要根据 SCB->AIRCR 中的中断分组设置来决定。  S$ y/ W9 J9 b( B- H5 `
8 g- K6 ~. w9 p5 A: x9 Q
03. 中断分组
8 w5 l) H# n, z0 `- D  GSTM32F4 将中断分为 5 个组,组 0~4。该分组的设置是由 SCB->AIRCR 寄存器的 bit10~8 来定义的。
6 F; n9 @1 y0 E8 b9 c6 E5 e
6 }* A" C* a5 L) p! D: S4 i  |& v 20200823164432912.png
" s" [# ]4 q% Z* a7 B* `* g* `- D9 a& O5 Z3 b
我们就可以清楚的看到组 0~4 对应的配置关系,例如组设置为 3,那么此时所有的 82 个中断,每个中断的中断优先寄存器的高四位中的最高 3 位是抢占优先级,低 1 位是响应优先级。每个中断,你可以设置抢占优先级为 0~7,响应优先级为 1 或 0。抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。
. B( @- E, K) I+ ^" s; w5 m$ Z1 W. v! m
这里需要注意两点:第一,如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;第二,高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。
- L+ N8 c1 X0 V; |3 V
# Z9 i. c7 N0 P" f) ^5 B/ w0 [结合实例说明一下:假定设置中断优先级组为 2,然后设置中断 3(RTC_WKUP 中断)的抢占优先级为 2,响应优先级为 1。中断 6(外部中断 0)的抢占优先级为 3,响应优先级为 0。中断 7(外部中断 1)的抢占优先级为 2,响应优先级为 0。那么这 3 个中断的优先级顺序为:中断 7>中断 3>中断 6。
3 _8 v' s3 \2 ^9 y8 Q- p5 H- v) l  f! V- a8 T. S" k
上面例子中的中断 3 和中断 7 都可以打断中断 6 的中断。而中断 7 和中断 3 却不可以相互打断!
: o. D6 r9 T0 ~' t2 T6 Q. O1 l: J1 ?1 E
04. 相关类型( o9 _3 ^$ N' r: }7 `0 s" E8 N: u
misc.h文件4 W$ V# i$ r6 F

; M2 Q7 Z' }; m% X, SNVIC_InitTypeDef类型7 S! T+ G# _$ P+ v/ t+ H
2 P, o3 h! x* R- v
  1. /**
    & o4 O9 B: P: U" y
  2.   * @brief  NVIC Init Structure definition  ( o5 u2 f: H: T5 f* l5 ~# L1 R
  3.   */1 C- H* B; T. v6 ~9 T4 Y% V4 {4 `
  4. * J$ E! `9 Y! x
  5. typedef struct" B3 T. i+ J1 @) r6 A2 p8 D
  6. {
    % y: q! o7 Z$ f6 R5 s! @% a& `/ U
  7.   uint8_t NVIC_IRQChannel;                    /*!< Specifies the IRQ channel to be enabled or disabled./ y2 c2 s  e# C9 y7 B
  8.                                                    This parameter can be an enumerator of @ref IRQn_Type 5 W7 o& {  k: ^! {! N
  9.                                                    enumeration (For the complete STM32 Devices IRQ Channels5 X. n& ~( T* o0 }
  10.                                                    list, please refer to stm32f4xx.h file) */( {& O1 z, A( x0 W/ j
  11. + g' `4 L0 \/ D. H2 V7 R5 V
  12.   uint8_t NVIC_IRQChannelPreemptionPriority;  /*!< Specifies the pre-emption priority for the IRQ channel
      T" X; d$ j- E
  13.                                                    specified in NVIC_IRQChannel. This parameter can be a value/ a: S  w& k6 O" g$ k; ?% z
  14.                                                    between 0 and 15 as described in the table @ref MISC_NVIC_Priority_Table
    8 i8 E1 ]# k* j0 x, S* \
  15.                                                    A lower priority value indicates a higher priority */
    & l+ I# a$ p2 {) y+ s  ]. _# |4 i

  16. 3 |! r) g, G3 Y' s
  17.   uint8_t NVIC_IRQChannelSubPriority;         /*!< Specifies the subpriority level for the IRQ channel specified
    7 e- o3 n8 v1 z! m. J
  18.                                                    in NVIC_IRQChannel. This parameter can be a value, M# t4 V; e+ u* r) o4 U' u# f
  19.                                                    between 0 and 15 as described in the table @ref MISC_NVIC_Priority_Table
    ( T! \4 ~8 Q, u$ q* O4 A
  20.                                                    A lower priority value indicates a higher priority */8 Y2 w/ b4 u0 I( w& ?5 I
  21. 5 E/ z5 k# K: f
  22.   FunctionalState NVIC_IRQChannelCmd;         /*!< Specifies whether the IRQ channel defined in NVIC_IRQChannel+ l' I6 G/ d1 x4 l* a" P( I; [
  23.                                                    will be enabled or disabled.
    . t: U, p, j  t5 m  D, \7 r
  24.                                                    This parameter can be set either to ENABLE or DISABLE */   
    . S9 c  C  j# `
  25. } NVIC_InitTypeDef;
复制代码
  P' y2 }( j- I
MISC_Vector_Table_Base
  1. /** @defgroup MISC_Vector_Table_Base
    2 n7 o3 E5 B: m! |6 M- F: z+ t( V  a
  2.   * @{
    7 `; v  ~3 j5 g6 U" \8 v
  3.   */
    # U$ j6 S1 N8 J
  4. 6 R8 U" j5 L+ J( {0 ^/ ?- M
  5. #define NVIC_VectTab_RAM             ((uint32_t)0x20000000)
    : h0 C* I  P! B+ g6 {
  6. #define NVIC_VectTab_FLASH           ((uint32_t)0x08000000)
    $ R+ m7 u! w; m+ r" {, o
  7. #define IS_NVIC_VECTTAB(VECTTAB) (((VECTTAB) == NVIC_VectTab_RAM) || \0 h) [9 O9 o" v; f
  8.                                   ((VECTTAB) == NVIC_VectTab_FLASH))
复制代码
1 }, ]) A% N6 z2 U4 R- b# p
MISC_System_Low_Power5 ^( u$ m: H5 g$ f2 V
- q( R- H! H, J, G) a! G5 T
  1. /** @defgroup MISC_System_Low_Power
    + t, A4 q( T% V( P" \0 Z
  2.   * @{
    * ?  p8 s8 b3 b! r: {' V" h3 Q! b
  3.   */
    7 X  I$ w" q: u& u+ d( [
  4. - k4 h+ ]" _( B" z! D! Y0 \" U$ ^
  5. #define NVIC_LP_SEVONPEND            ((uint8_t)0x10)
    " I  ]  g% s( ], T* P& F$ J9 O- h( T
  6. #define NVIC_LP_SLEEPDEEP            ((uint8_t)0x04)
    " W$ w4 G$ h, Q( _% u) p" m  _; D
  7. #define NVIC_LP_SLEEPONEXIT          ((uint8_t)0x02)" d9 }# x0 K& X* Y9 ]+ w: k, \3 H
  8. #define IS_NVIC_LP(LP) (((LP) == NVIC_LP_SEVONPEND) || \5 J/ I. Y) P3 `1 p0 q
  9.                         ((LP) == NVIC_LP_SLEEPDEEP) || \4 O  e- S( y4 k  x2 |
  10.                         ((LP) == NVIC_LP_SLEEPONEXIT))
复制代码
; H% L/ Z8 V9 {
MISC_Preemption_Priority_Group
% d8 `6 f9 g6 b2 K& Z

5 z# @8 m; _; Z7 O
  1. /** @defgroup MISC_Preemption_Priority_Group
    " ?! k% L9 ^# U5 j* o+ ^8 @( k
  2.   * @{
    : h: N4 `# z  L8 l) `. v
  3.   */- f' }4 b% s5 R! y2 \% R: ^

  4. + G8 h1 y# ~- G7 I! i/ j$ x
  5. #define NVIC_PriorityGroup_0         ((uint32_t)0x700) /*!< 0 bits for pre-emption priority
    $ G" ^( D+ h; P: o  ~: ]
  6.                                                             4 bits for subpriority */
    + q' U2 g6 @: t' l
  7. #define NVIC_PriorityGroup_1         ((uint32_t)0x600) /*!< 1 bits for pre-emption priority) j, M# _0 E) n3 ~. ]2 N3 ~# F
  8.                                                             3 bits for subpriority */
    0 h- D. k6 _' n, ]* `4 C
  9. #define NVIC_PriorityGroup_2         ((uint32_t)0x500) /*!< 2 bits for pre-emption priority& w& W, }; J7 K1 Q) g
  10.                                                             2 bits for subpriority */
    ) l6 c7 W* S' q2 H
  11. #define NVIC_PriorityGroup_3         ((uint32_t)0x400) /*!< 3 bits for pre-emption priority. T3 w. H1 X1 |+ W( L
  12.                                                             1 bits for subpriority */
    ) _. B" Y! _- j
  13. #define NVIC_PriorityGroup_4         ((uint32_t)0x300) /*!< 4 bits for pre-emption priority- h. t! V; e$ K* G* {! _
  14.                                                             0 bits for subpriority */3 A# z: q: ^) f( E2 n8 U. N
  15. 5 J$ @* }% B3 y4 c1 D
  16. #define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PriorityGroup_0) || \0 r1 R, t3 Z1 E1 B
  17.                                        ((GROUP) == NVIC_PriorityGroup_1) || \
    , s4 ]* c& j  l2 }+ d3 S
  18.                                        ((GROUP) == NVIC_PriorityGroup_2) || \0 p3 Q8 r4 z* K' ?/ l: u' z) f
  19.                                        ((GROUP) == NVIC_PriorityGroup_3) || \
    ) K# @) p( b7 A! f
  20.                                        ((GROUP) == NVIC_PriorityGroup_4))
    1 F8 c/ F0 A6 a4 R7 }- y
  21. 0 u" ?9 T# O6 ^  g) W; J
  22. #define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY)  ((PRIORITY) < 0x10)# V" J" j6 j4 O2 p2 `
  23. ( E( P1 e+ ?* b1 X, X
  24. #define IS_NVIC_SUB_PRIORITY(PRIORITY)  ((PRIORITY) < 0x10)
    % K+ x3 p5 r$ l* |& P4 a  r
  25. . }1 F! o7 `3 I1 M' g
  26. #define IS_NVIC_OFFSET(OFFSET)  ((OFFSET) < 0x000FFFFF)
复制代码

$ ]- I' C, C* L( `$ h" _  \MISC_SysTick_clock_sourc
8 Q; Q& G1 P  P) r, _) ~6 ?8 Y8 p/ g" o
  1. /** @defgroup MISC_SysTick_clock_source # U, G; s( `4 T9 x" I
  2.   * @{
    : ]; L2 {( g+ M& l1 a
  3.   */
    3 I9 @1 ^# z$ h# y, ^

  4. 9 L1 ^' x- `. w9 u
  5. #define SysTick_CLKSource_HCLK_Div8    ((uint32_t)0xFFFFFFFB)
    # Q4 t, a5 E" x( g
  6. #define SysTick_CLKSource_HCLK         ((uint32_t)0x00000004)2 E4 A/ Q' ^! N+ F! p) ^" u
  7. #define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SysTick_CLKSource_HCLK) || \
    9 [4 ]5 u7 [4 v4 K& h+ Q
  8.                                        ((SOURCE) == SysTick_CLKSource_HCLK_Div8))
    7 m/ s$ ?( W, M% ~. O
复制代码

- ~* A4 e* F/ J中断名字(stm32f4xx.h)5 w+ N0 X% w2 n+ x% O8 ]+ X

; C8 t6 P* m) ]- m9 w$ ~& T
  1. /**2 T+ T' K4 W3 j  J( }) Z
  2. * @brief STM32F4XX Interrupt Number Definition, according to the selected device
    6 q, y1 q% ?& |$ Q0 k
  3. *        in @ref Library_configuration_section
    ' l4 ?$ S* m* K9 r
  4. */' M3 }+ W) ^- C% _% ^7 S
  5. typedef enum IRQn( e. p( h6 I; Y# M- j
  6. {% E5 T5 G7 |) M: s
  7. /******  Cortex-M4 Processor Exceptions Numbers ****************************************************************/
    : L; S& c9 T+ U) C, u
  8.   NonMaskableInt_IRQn         = -14,    /*!< 2 Non Maskable Interrupt                                          */" f* G( ~$ L; s% q+ W) U# j6 A+ r
  9.   MemoryManagement_IRQn       = -12,    /*!< 4 Cortex-M4 Memory Management Interrupt                           */
    # K) v4 j8 ^' N. N  Z: r1 E( b( Z
  10.   BusFault_IRQn               = -11,    /*!< 5 Cortex-M4 Bus Fault Interrupt                                   */
    , x! T2 k- B+ j* [2 z$ I3 g8 c1 ]0 |, F
  11.   UsageFault_IRQn             = -10,    /*!< 6 Cortex-M4 Usage Fault Interrupt                                 */7 z' j+ c) O" S/ A
  12.   SVCall_IRQn                 = -5,     /*!< 11 Cortex-M4 SV Call Interrupt                                    */
    : P0 x) ~" v6 T! I4 ]
  13.   DebugMonitor_IRQn           = -4,     /*!< 12 Cortex-M4 Debug Monitor Interrupt                              */0 L* P$ ]9 Z, J
  14.   PendSV_IRQn                 = -2,     /*!< 14 Cortex-M4 Pend SV Interrupt                                    */3 i7 y: w2 v- J8 j
  15.   SysTick_IRQn                = -1,     /*!< 15 Cortex-M4 System Tick Interrupt                                */) d- \2 [. u. j' D4 {7 n
  16. /******  STM32 specific Interrupt Numbers **********************************************************************/
    : Y+ r* P' X) c# l2 C% p
  17.   WWDG_IRQn                   = 0,      /*!< Window WatchDog Interrupt                                         */
    8 p$ @/ v- v/ ^: U; k! l3 Y
  18.   PVD_IRQn                    = 1,      /*!< PVD through EXTI Line detection Interrupt                         */" A" C) Y0 }5 B8 g
  19.   TAMP_STAMP_IRQn             = 2,      /*!< Tamper and TimeStamp interrupts through the EXTI line             */! @  C2 U4 i1 |; I. W8 o
  20.   RTC_WKUP_IRQn               = 3,      /*!< RTC Wakeup interrupt through the EXTI line                        */) }7 k) |  u7 l/ K, E$ U1 ~
  21.   FLASH_IRQn                  = 4,      /*!< FLASH global Interrupt                                            */' d* s+ W2 h2 q9 i/ f& o2 E! Q/ Q
  22.   RCC_IRQn                    = 5,      /*!< RCC global Interrupt                                              */3 @5 ~+ z" Y  C( j" w9 Z
  23.   EXTI0_IRQn                  = 6,      /*!< EXTI Line0 Interrupt                                              */3 Q/ L) l3 w7 a4 C+ f
  24.   EXTI1_IRQn                  = 7,      /*!< EXTI Line1 Interrupt                                              */! M* t2 [  {8 z
  25.   EXTI2_IRQn                  = 8,      /*!< EXTI Line2 Interrupt                                              */
    ; ~* Y) Z. o6 ?$ |" G' H- E2 ]
  26.   EXTI3_IRQn                  = 9,      /*!< EXTI Line3 Interrupt                                              */5 {5 B9 T, r3 K& m$ [6 o4 g
  27.   EXTI4_IRQn                  = 10,     /*!< EXTI Line4 Interrupt                                              */; W6 J+ C: m* u
  28.   DMA1_Stream0_IRQn           = 11,     /*!< DMA1 Stream 0 global Interrupt                                    *// E' I7 A0 T9 t, e: w. q6 d! [. B
  29.   DMA1_Stream1_IRQn           = 12,     /*!< DMA1 Stream 1 global Interrupt                                    */
      b6 E$ @  }2 k$ e  G% |( w
  30.   DMA1_Stream2_IRQn           = 13,     /*!< DMA1 Stream 2 global Interrupt                                    */
    - {* x% i  p# H! b
  31.   DMA1_Stream3_IRQn           = 14,     /*!< DMA1 Stream 3 global Interrupt                                    */
    8 A) b4 P* w3 t8 G! ~* {
  32.   DMA1_Stream4_IRQn           = 15,     /*!< DMA1 Stream 4 global Interrupt                                    */# ^7 H* g7 I1 j9 t9 X$ j
  33.   DMA1_Stream5_IRQn           = 16,     /*!< DMA1 Stream 5 global Interrupt                                    */  `) D$ s: v% ]* \4 W9 }
  34.   DMA1_Stream6_IRQn           = 17,     /*!< DMA1 Stream 6 global Interrupt                                    */
    . t! k# c% u/ _7 M5 w
  35.   ADC_IRQn                    = 18,     /*!< ADC1, ADC2 and ADC3 global Interrupts                             */2 E/ ]% I1 L+ S* _  v
  36. , l% c* A4 a! \( w/ J
  37. #if defined(STM32F40_41xxx)
    3 X/ _4 N; l, R. P% V* r. @4 D. `
  38.   CAN1_TX_IRQn                = 19,     /*!< CAN1 TX Interrupt                                                 */
    1 ~* A* g5 `$ V
  39.   CAN1_RX0_IRQn               = 20,     /*!< CAN1 RX0 Interrupt                                                */! M1 \# q! E& _* O( p! o4 P
  40.   CAN1_RX1_IRQn               = 21,     /*!< CAN1 RX1 Interrupt                                                */
    / a" d6 G0 u5 F+ X1 `
  41.   CAN1_SCE_IRQn               = 22,     /*!< CAN1 SCE Interrupt                                                */
    9 `* U& G5 ^! ~; R2 c3 ], p
  42.   EXTI9_5_IRQn                = 23,     /*!< External Line[9:5] Interrupts                                     */
    " u1 c$ D2 J$ Q7 S! b2 W- [+ P3 A
  43.   TIM1_BRK_TIM9_IRQn          = 24,     /*!< TIM1 Break interrupt and TIM9 global interrupt                    */4 R' V" T) E; y5 y: a( g
  44.   TIM1_UP_TIM10_IRQn          = 25,     /*!< TIM1 Update Interrupt and TIM10 global interrupt                  */
    $ n) ?7 p& _4 a1 R" S+ j3 b
  45.   TIM1_TRG_COM_TIM11_IRQn     = 26,     /*!< TIM1 Trigger and Commutation Interrupt and TIM11 global interrupt */' t' a  A2 ~3 [0 J! n) e* v
  46.   TIM1_CC_IRQn                = 27,     /*!< TIM1 Capture Compare Interrupt                                    */- D# m+ y) b5 ]& r& I+ w
  47.   TIM2_IRQn                   = 28,     /*!< TIM2 global Interrupt                                             */8 w$ r& Q) M' V5 y& w  S. w
  48.   TIM3_IRQn                   = 29,     /*!< TIM3 global Interrupt                                             */
    ( F" F' E8 F$ X; V; V# D3 b
  49.   TIM4_IRQn                   = 30,     /*!< TIM4 global Interrupt                                             */
    + t6 F3 W7 |3 R8 B5 v
  50.   I2C1_EV_IRQn                = 31,     /*!< I2C1 Event Interrupt                                              */
    $ N; ^* k- l' S; r% z" U, w0 K
  51.   I2C1_ER_IRQn                = 32,     /*!< I2C1 Error Interrupt                                              */1 v5 M5 [) m1 b; j  \* a, U4 _9 ^0 [
  52.   I2C2_EV_IRQn                = 33,     /*!< I2C2 Event Interrupt                                              */
    / r  U; [5 x) ^/ B! m
  53.   I2C2_ER_IRQn                = 34,     /*!< I2C2 Error Interrupt                                              */$ W0 s- r- _6 o
  54.   SPI1_IRQn                   = 35,     /*!< SPI1 global Interrupt                                             */
    : z' R# w( Z2 O$ X" I! N9 ]
  55.   SPI2_IRQn                   = 36,     /*!< SPI2 global Interrupt                                             */
    3 Q" a- c6 u& F% j5 O, ?. z  I
  56.   USART1_IRQn                 = 37,     /*!< USART1 global Interrupt                                           */! p. _) B3 O5 s" ~/ u2 `- ~" o+ P
  57.   USART2_IRQn                 = 38,     /*!< USART2 global Interrupt                                           */8 b+ d. {+ F/ M8 [
  58.   USART3_IRQn                 = 39,     /*!< USART3 global Interrupt                                           */: c# q1 G9 u1 T# Z
  59.   EXTI15_10_IRQn              = 40,     /*!< External Line[15:10] Interrupts                                   */
    ' Z/ f  ]' |- Z: R+ h' A) q2 g
  60.   RTC_Alarm_IRQn              = 41,     /*!< RTC Alarm (A and B) through EXTI Line Interrupt                   */
    : X6 y7 M! j4 t+ w% y' n! m1 ?2 R
  61.   OTG_FS_WKUP_IRQn            = 42,     /*!< USB OTG FS Wakeup through EXTI line interrupt                     */8 E/ d& [0 Q% k4 l5 I& i6 G
  62.   TIM8_BRK_TIM12_IRQn         = 43,     /*!< TIM8 Break Interrupt and TIM12 global interrupt                   */
    ; i5 V6 H* D8 ~0 F- o/ Z  M
  63.   TIM8_UP_TIM13_IRQn          = 44,     /*!< TIM8 Update Interrupt and TIM13 global interrupt                  */
    0 l. m+ b) Z/ _, H- _  |
  64.   TIM8_TRG_COM_TIM14_IRQn     = 45,     /*!< TIM8 Trigger and Commutation Interrupt and TIM14 global interrupt */$ X0 j; f# ]2 }# q1 K
  65.   TIM8_CC_IRQn                = 46,     /*!< TIM8 Capture Compare Interrupt                                    */1 [1 m# o6 j9 {! m+ J! j; h- O! B
  66.   DMA1_Stream7_IRQn           = 47,     /*!< DMA1 Stream7 Interrupt                                            */  o, s2 N: ?+ R0 ?1 E3 Q
  67.   FSMC_IRQn                   = 48,     /*!< FSMC global Interrupt                                             */. |- K+ V8 [! J) |8 k. T- n" w9 |
  68.   SDIO_IRQn                   = 49,     /*!< SDIO global Interrupt                                             */
    ( f7 M% R' o' k6 g4 f6 c$ e
  69.   TIM5_IRQn                   = 50,     /*!< TIM5 global Interrupt                                             */. m  [- h' s' A6 R1 f, O: j: w7 r
  70.   SPI3_IRQn                   = 51,     /*!< SPI3 global Interrupt                                             */
    5 c4 }5 d2 D; H8 {6 A& U
  71.   UART4_IRQn                  = 52,     /*!< UART4 global Interrupt                                            */
    % ?$ s' d) ]$ t& n" j- T* E6 x
  72.   UART5_IRQn                  = 53,     /*!< UART5 global Interrupt                                            */% v3 b/ j* }5 T, Y6 n: v
  73.   TIM6_DAC_IRQn               = 54,     /*!< TIM6 global and DAC1&2 underrun error  interrupts                 */
    ) }$ I/ C9 H+ E. M' X3 N; T8 N; v
  74.   TIM7_IRQn                   = 55,     /*!< TIM7 global interrupt                                             */
    " |# H5 B7 J6 C7 u) v0 G  m
  75.   DMA2_Stream0_IRQn           = 56,     /*!< DMA2 Stream 0 global Interrupt                                    */2 s1 @' g0 L* P( }
  76.   DMA2_Stream1_IRQn           = 57,     /*!< DMA2 Stream 1 global Interrupt                                    */* `! p+ b% V, d% o/ `
  77.   DMA2_Stream2_IRQn           = 58,     /*!< DMA2 Stream 2 global Interrupt                                    */
    7 u; W2 p- r+ K/ B" _
  78.   DMA2_Stream3_IRQn           = 59,     /*!< DMA2 Stream 3 global Interrupt                                    */1 d4 r; w$ y  @& N
  79.   DMA2_Stream4_IRQn           = 60,     /*!< DMA2 Stream 4 global Interrupt                                    */
    / p$ D- c% }2 c: @: d& c
  80.   ETH_IRQn                    = 61,     /*!< Ethernet global Interrupt                                         */
    ; o0 ^/ C. G+ Y# J& D0 J
  81.   ETH_WKUP_IRQn               = 62,     /*!< Ethernet Wakeup through EXTI line Interrupt                       */- _8 a  J+ [. P
  82.   CAN2_TX_IRQn                = 63,     /*!< CAN2 TX Interrupt                                                 */
    ; q2 }6 P% O/ V' _0 P: y, A6 r
  83.   CAN2_RX0_IRQn               = 64,     /*!< CAN2 RX0 Interrupt                                                */% C8 D# i1 n. h' _. }* d
  84.   CAN2_RX1_IRQn               = 65,     /*!< CAN2 RX1 Interrupt                                                */
    . R* O; S3 I( y$ N
  85.   CAN2_SCE_IRQn               = 66,     /*!< CAN2 SCE Interrupt                                                */* r( e, s3 {% X; @$ l9 j  H
  86.   OTG_FS_IRQn                 = 67,     /*!< USB OTG FS global Interrupt                                       */
    7 y$ ^( r3 u0 r
  87.   DMA2_Stream5_IRQn           = 68,     /*!< DMA2 Stream 5 global interrupt                                    */
    9 \: M8 Y: ?3 M+ O% u9 w7 B
  88.   DMA2_Stream6_IRQn           = 69,     /*!< DMA2 Stream 6 global interrupt                                    */
    * r) b  o- C. K
  89.   DMA2_Stream7_IRQn           = 70,     /*!< DMA2 Stream 7 global interrupt                                    */3 Z1 a8 o* n% U9 P- d! y* U+ R
  90.   USART6_IRQn                 = 71,     /*!< USART6 global interrupt                                           */
    9 D, D! K6 m" u- N& k- ?
  91.   I2C3_EV_IRQn                = 72,     /*!< I2C3 event interrupt                                              */
    6 ~+ V# @( m5 s, {7 E3 v
  92.   I2C3_ER_IRQn                = 73,     /*!< I2C3 error interrupt                                              */* e" }5 {( [; S: M
  93.   OTG_HS_EP1_OUT_IRQn         = 74,     /*!< USB OTG HS End Point 1 Out global interrupt                       */8 u: Z' O% w5 `  y9 A, Z6 B
  94.   OTG_HS_EP1_IN_IRQn          = 75,     /*!< USB OTG HS End Point 1 In global interrupt                        */8 T; U1 p4 T* z; E( M# v
  95.   OTG_HS_WKUP_IRQn            = 76,     /*!< USB OTG HS Wakeup through EXTI interrupt                          */( l9 R2 v6 O4 _" k/ ~4 v
  96.   OTG_HS_IRQn                 = 77,     /*!< USB OTG HS global interrupt                                       */, y  ]) Q% x, ?* I
  97.   DCMI_IRQn                   = 78,     /*!< DCMI global interrupt                                             */4 j- A& [. l6 K/ t9 \+ e" {
  98.   CRYP_IRQn                   = 79,     /*!< CRYP crypto global interrupt                                      */. M' F/ j: [0 D6 F. [
  99.   HASH_RNG_IRQn               = 80,     /*!< Hash and Rng global interrupt                                     */
    ) ]5 R$ Y8 s- s, N: j6 i/ ?7 d
  100.   FPU_IRQn                    = 81      /*!< FPU global interrupt                                              */0 S9 _9 l+ J; f- R
  101. #endif /* STM32F40_41xxx */
复制代码

2 h+ Q) Q" t/ G9 [; [. x05. 相关函数
, `) Y7 H/ K6 s7 W8 i. ~* c" X
  1. /* Exported macro ------------------------------------------------------------*/1 u% O# i5 x0 L9 N# A
  2. /* Exported functions --------------------------------------------------------*/
    0 z& `+ k5 ^+ [# H

  3. # _; s' X( B, [8 m
  4. void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);( f3 S# K8 y2 v+ l- s
  5. void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);3 X+ a8 ]% n8 l
  6. void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);! E8 V! k; J0 v2 z0 ?0 }1 y" V# [
  7. void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState);
    6 A0 z  M. o0 E& v. T2 I7 o% I; t# T
  8. void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);
复制代码
+ ]5 z4 _& o: G- E4 _
+ H9 Y3 V- i: k  s! {  J( I: x* Q$ C
赞 收藏 评论0 发布时间:2022-4-1 15:20

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版