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

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

[复制链接]
STMCU小助手 发布时间:2022-6-13 10:30
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 \
  1. /** \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).6 a3 l5 G" m$ B" J& b" H. v
  2. */
    # Z( y' U% ], \5 a" G& E) f2 b+ d
  3. typedef struct
    ' _3 V9 v/ [+ m3 ^, ]/ N' K& H
  4. {: U- y8 {& ?- D, s
  5.   __IO uint32_t ISER[8];                 /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register           */4 c3 V4 c* p( m2 @" J* w" ~8 b) C
  6.        uint32_t RESERVED0[24];
    * B3 {" R( j) b! L
  7.   __IO uint32_t ICER[8];                 /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register         */, d; ^/ o! y0 I: z' k
  8.        uint32_t RSERVED1[24];% @- I4 C" A( V6 {5 ^5 f
  9.   __IO uint32_t ISPR[8];                 /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register          */
    ' L7 Q0 s7 r: K, x
  10.        uint32_t RESERVED2[24];6 E# H1 z# a, l- i7 R
  11.   __IO uint32_t ICPR[8];                 /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register        */
    : l0 T) W2 O, i
  12.        uint32_t RESERVED3[24];7 r0 z$ r9 {0 G" C) h
  13.   __IO uint32_t IABR[8];                 /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register           */
    ( k1 a4 g1 N7 t+ Y
  14.        uint32_t RESERVED4[56];4 _4 v! _* l( |/ ?+ L* F* y, H
  15.   __IO uint8_t  IP[240];                 /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) */
    9 H4 k/ p: I' H9 m( \# y
  16.        uint32_t RESERVED5[644];
    ) A& K( U- @; k) L
  17.   __O  uint32_t STIR;                    /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register     */
    + J. W+ g( Y4 j: E: Y8 S
  18. }  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
U{Z38%XM7YE}_YTO1C973.png
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
  1. /**
    - ^6 w& c" A6 ~/ a1 o( I
  2.   * @brief  NVIC Init Structure definition  
    4 N! m; m2 n( X* g( k( j: G8 i# }
  3.   */- [" i: v  S+ r- }/ H" N, f
  4. * S! Y4 L7 t# m* U
  5. typedef struct
    ; \2 @4 K! J4 F' R3 w4 ~% ^2 x
  6. {7 i, ^0 y* f* w1 G
  7.   uint8_t NVIC_IRQChannel;                    /*!< Specifies the IRQ channel to be enabled or disabled.
    6 I" c$ S- P# q+ F  g
  8.                                                    This parameter can be an enumerator of @ref IRQn_Type 5 `- K) m5 N7 P% Z
  9.                                                    enumeration (For the complete STM32 Devices IRQ Channels
    : r" Q# l2 U3 H  w
  10.                                                    list, please refer to stm32f4xx.h file) */  v% R+ B5 h/ Y/ O" i

  11. 9 Z# }9 s! h) U% l9 r/ ^. t) B+ L* ]: P
  12.   uint8_t NVIC_IRQChannelPreemptionPriority;  /*!< Specifies the pre-emption priority for the IRQ channel3 x0 q- e) b% @, z
  13.                                                    specified in NVIC_IRQChannel. This parameter can be a value
    # _$ J) @' C0 g6 R2 D$ u
  14.                                                    between 0 and 15 as described in the table @ref MISC_NVIC_Priority_Table
    6 A* M& k  y4 }) Z( G
  15.                                                    A lower priority value indicates a higher priority */+ e  X1 G& Q( E! r0 y- t! H  ?

  16. 6 T1 N8 C8 h- F2 V  b
  17.   uint8_t NVIC_IRQChannelSubPriority;         /*!< Specifies the subpriority level for the IRQ channel specified
    7 V  V4 [9 y. j: p& t
  18.                                                    in NVIC_IRQChannel. This parameter can be a value
    : v: U6 a1 M6 t! Y  s5 @# f3 E( T
  19.                                                    between 0 and 15 as described in the table @ref MISC_NVIC_Priority_Table0 A6 r/ J( B! z8 T- O
  20.                                                    A lower priority value indicates a higher priority */
    " r* L: ^- o$ u6 x/ w0 x
  21. $ K) W* t8 h9 S& B7 J
  22.   FunctionalState NVIC_IRQChannelCmd;         /*!< Specifies whether the IRQ channel defined in NVIC_IRQChannel& n$ O1 a% Z( ~- @3 j
  23.                                                    will be enabled or disabled. 9 `% R" ~( E& i$ w( @3 P, i
  24.                                                    This parameter can be set either to ENABLE or DISABLE */   ) G, V, F- ?) Y7 R& d4 d+ L
  25. } NVIC_InitTypeDef;
复制代码
5 N9 H4 P- q! r
MISC_Vector_Table_Base
% y% _9 W& }  P/ `( f& Y" k; R/ D% r
  1. /** @defgroup MISC_Vector_Table_Base
    * N( s% \( g2 g  t$ M" L+ W
  2.   * @{. E6 p1 ?" |2 Q5 C
  3.   */; x+ q. `3 ]8 _: o# T0 o
  4. * O# }; D3 q$ t) _0 F1 g
  5. #define NVIC_VectTab_RAM             ((uint32_t)0x20000000)
    5 ~. [2 Z8 C/ s% F% L8 @
  6. #define NVIC_VectTab_FLASH           ((uint32_t)0x08000000)) M+ d6 a" ]* U: X0 K
  7. #define IS_NVIC_VECTTAB(VECTTAB) (((VECTTAB) == NVIC_VectTab_RAM) || \
    4 N  E* r- W5 g2 ]
  8.                                   ((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) ]
  1. /** @defgroup MISC_System_Low_Power ( X* O6 U( r* b; @  _
  2.   * @{
    ! D5 p5 a, W1 t; o) B' A" I
  3.   */6 d& I, G1 W5 X' Y, ?

  4. - ~/ r$ p2 V6 r5 s8 ~+ }2 p
  5. #define NVIC_LP_SEVONPEND            ((uint8_t)0x10)2 {6 d% G" q( T" o  y, k% P2 o. i" \
  6. #define NVIC_LP_SLEEPDEEP            ((uint8_t)0x04)
    , r3 r, G! V3 I8 `. @7 _) n2 ?) M
  7. #define NVIC_LP_SLEEPONEXIT          ((uint8_t)0x02)
    9 l+ z( K; F" @" y5 M
  8. #define IS_NVIC_LP(LP) (((LP) == NVIC_LP_SEVONPEND) || \
    + t- a. K& Q) y3 R
  9.                         ((LP) == NVIC_LP_SLEEPDEEP) || \, E( t6 P! [2 J2 r' n6 E; ~
  10.                         ((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* |
  1. /** @defgroup MISC_Preemption_Priority_Group
    : `# r& i* Q! h) J" b" P3 g1 Z
  2.   * @{
    / L. `( P* o6 A& v# h" A
  3.   */
    * T% Z2 `+ G; R% x0 D  n+ U
  4. 5 t+ T2 {/ S  T, R  D. h
  5. #define NVIC_PriorityGroup_0         ((uint32_t)0x700) /*!< 0 bits for pre-emption priority! n1 m0 e* q  @4 ^9 V8 A
  6.                                                             4 bits for subpriority */. z5 d& P& Q) ^/ Y5 i
  7. #define NVIC_PriorityGroup_1         ((uint32_t)0x600) /*!< 1 bits for pre-emption priority
    5 o9 N/ B& N2 e$ J
  8.                                                             3 bits for subpriority */
    5 b8 D0 w9 i5 _- `9 o3 U
  9. #define NVIC_PriorityGroup_2         ((uint32_t)0x500) /*!< 2 bits for pre-emption priority
    2 |9 }" n  ?8 u7 o6 r! r! ~2 @
  10.                                                             2 bits for subpriority */! N/ E* s4 @- [2 q4 |6 H' |) _
  11. #define NVIC_PriorityGroup_3         ((uint32_t)0x400) /*!< 3 bits for pre-emption priority
    ' p0 ?. L0 c2 \# @; V) F* P
  12.                                                             1 bits for subpriority */$ W; H; @7 f3 }& i( T
  13. #define NVIC_PriorityGroup_4         ((uint32_t)0x300) /*!< 4 bits for pre-emption priority
      G. m9 u$ ^3 }
  14.                                                             0 bits for subpriority */) r  t% e! e. f) d

  15. 9 G/ @: ]$ P% v& Q) o6 k
  16. #define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PriorityGroup_0) || \
    0 k, Q, h& r& Z3 o2 ?/ a  M# [
  17.                                        ((GROUP) == NVIC_PriorityGroup_1) || \
    9 f/ j! d* I8 ^/ D( j. I
  18.                                        ((GROUP) == NVIC_PriorityGroup_2) || \* ~% n% ^* B& z! u( k, o* K
  19.                                        ((GROUP) == NVIC_PriorityGroup_3) || \, K( J+ E$ f7 T# w$ L3 k& G$ h
  20.                                        ((GROUP) == NVIC_PriorityGroup_4))
    # U( H. B* \: {4 k6 E
  21. : b, N( f/ `; Y! D+ Q
  22. #define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY)  ((PRIORITY) < 0x10)7 l1 P6 R" w, x5 W

  23. , Y  I8 Z8 k0 u& @; f7 B' `
  24. #define IS_NVIC_SUB_PRIORITY(PRIORITY)  ((PRIORITY) < 0x10)
    : n6 Z& @& r9 D6 t5 i5 ^

  25. 6 C4 w+ d, v0 Z6 A/ _; a
  26. #define IS_NVIC_OFFSET(OFFSET)  ((OFFSET) < 0x000FFFFF)
复制代码

5 }$ ?, F! a3 [  }! eMISC_SysTick_clock_source
  1. /** @defgroup MISC_SysTick_clock_source
    ( s/ q! g7 l5 p
  2.   * @{4 O. [: \4 G# {9 m% r* V. T0 H
  3.   */, F0 L9 S. Q! K) E4 x7 }
  4. 5 j2 e8 R" E  O2 H2 |7 U
  5. #define SysTick_CLKSource_HCLK_Div8    ((uint32_t)0xFFFFFFFB)
    - O0 B8 [# c  `8 r* @/ k
  6. #define SysTick_CLKSource_HCLK         ((uint32_t)0x00000004)
    3 y- l2 i4 L/ G  v
  7. #define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SysTick_CLKSource_HCLK) || \
    % R2 G5 W3 Y, q& S5 }9 C2 u$ C
  8.                                        ((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
  1. /**
    9 u! b" W% T; b- j. s
  2. * @brief STM32F4XX Interrupt Number Definition, according to the selected device & V9 t! ^1 k2 N/ c; n5 w
  3. *        in @ref Library_configuration_section # K! r$ A2 ^, K* d2 Y
  4. */. _' o2 F# d! j# v
  5. typedef enum IRQn
      q$ d& j* D  L" u$ h
  6. {1 i  b1 w0 n" y" J& F
  7. /******  Cortex-M4 Processor Exceptions Numbers ****************************************************************/  ?* g. ~$ p& I& v/ N5 q
  8.   NonMaskableInt_IRQn         = -14,    /*!< 2 Non Maskable Interrupt                                          */9 X( k. ~2 A# O, ~' T5 o
  9.   MemoryManagement_IRQn       = -12,    /*!< 4 Cortex-M4 Memory Management Interrupt                           *// P: Z  {* o* f( {& @$ G4 W4 b
  10.   BusFault_IRQn               = -11,    /*!< 5 Cortex-M4 Bus Fault Interrupt                                   */
    & e+ q( L4 k0 }% \7 E
  11.   UsageFault_IRQn             = -10,    /*!< 6 Cortex-M4 Usage Fault Interrupt                                 */
    + X) o9 [; W6 v, ~$ L
  12.   SVCall_IRQn                 = -5,     /*!< 11 Cortex-M4 SV Call Interrupt                                    */
    ( C  ^2 t; `2 |/ I9 |+ s/ C' ~
  13.   DebugMonitor_IRQn           = -4,     /*!< 12 Cortex-M4 Debug Monitor Interrupt                              */
    4 m  m- {9 L8 [% X" Y
  14.   PendSV_IRQn                 = -2,     /*!< 14 Cortex-M4 Pend SV Interrupt                                    */
    ; }# ?6 d& p9 h5 N
  15.   SysTick_IRQn                = -1,     /*!< 15 Cortex-M4 System Tick Interrupt                                */
      ^* \( v. _. h# u
  16. /******  STM32 specific Interrupt Numbers **********************************************************************/+ G" E" g- @# ~- E4 Z* s9 _2 {5 P
  17.   WWDG_IRQn                   = 0,      /*!< Window WatchDog Interrupt                                         */
    0 k( ^. Y: q1 O# ]
  18.   PVD_IRQn                    = 1,      /*!< PVD through EXTI Line detection Interrupt                         */
    # D0 t* V3 p) o8 l4 O
  19.   TAMP_STAMP_IRQn             = 2,      /*!< Tamper and TimeStamp interrupts through the EXTI line             */
    0 b5 ]! S- J" J( F- @
  20.   RTC_WKUP_IRQn               = 3,      /*!< RTC Wakeup interrupt through the EXTI line                        */9 X. f' f; \0 q, C; v. }/ A3 n
  21.   FLASH_IRQn                  = 4,      /*!< FLASH global Interrupt                                            */
    1 b* p5 C6 `* o5 ?
  22.   RCC_IRQn                    = 5,      /*!< RCC global Interrupt                                              */
    / M0 P, s1 Z/ R0 `, Y/ r; ]/ h3 a. j
  23.   EXTI0_IRQn                  = 6,      /*!< EXTI Line0 Interrupt                                              */& n1 S8 V- ~. L& h  }" R
  24.   EXTI1_IRQn                  = 7,      /*!< EXTI Line1 Interrupt                                              */
    4 g% s' E8 I& l$ z6 U
  25.   EXTI2_IRQn                  = 8,      /*!< EXTI Line2 Interrupt                                              */( G) h/ `0 Q' T# }0 @4 x3 ^
  26.   EXTI3_IRQn                  = 9,      /*!< EXTI Line3 Interrupt                                              *// w% v3 H" j( K! _
  27.   EXTI4_IRQn                  = 10,     /*!< EXTI Line4 Interrupt                                              */3 `0 {: Q. \4 m" u4 d* j5 h
  28.   DMA1_Stream0_IRQn           = 11,     /*!< DMA1 Stream 0 global Interrupt                                    */* F! ~* P* _3 w. C
  29.   DMA1_Stream1_IRQn           = 12,     /*!< DMA1 Stream 1 global Interrupt                                    */
    ) f% H8 c+ l' V7 H6 ?0 J' ^2 A5 u# s
  30.   DMA1_Stream2_IRQn           = 13,     /*!< DMA1 Stream 2 global Interrupt                                    */
    / s1 A+ Y" [- ]0 B7 L# o( S
  31.   DMA1_Stream3_IRQn           = 14,     /*!< DMA1 Stream 3 global Interrupt                                    */
    7 I: F( Q  @0 p, n
  32.   DMA1_Stream4_IRQn           = 15,     /*!< DMA1 Stream 4 global Interrupt                                    */% k  H2 T% j' Q' ]
  33.   DMA1_Stream5_IRQn           = 16,     /*!< DMA1 Stream 5 global Interrupt                                    */
    . k  M/ l% M2 [. \+ g, G& E
  34.   DMA1_Stream6_IRQn           = 17,     /*!< DMA1 Stream 6 global Interrupt                                    */3 ^3 C9 Y' o" s. V$ N! a/ K7 Z0 B
  35.   ADC_IRQn                    = 18,     /*!< ADC1, ADC2 and ADC3 global Interrupts                             */
    $ H9 h' z1 q1 C- c7 W

  36. & E( V+ k. |6 H- J5 X, w# f' C
  37. #if defined(STM32F40_41xxx)
    5 w; e& N% G# C
  38.   CAN1_TX_IRQn                = 19,     /*!< CAN1 TX Interrupt                                                 */
    , c0 v) ?2 B$ U  i6 M  x5 e" o
  39.   CAN1_RX0_IRQn               = 20,     /*!< CAN1 RX0 Interrupt                                                */$ c, E: a3 S# e+ {# K
  40.   CAN1_RX1_IRQn               = 21,     /*!< CAN1 RX1 Interrupt                                                */& b' H  L- u; M: |+ _4 U9 ]# I
  41.   CAN1_SCE_IRQn               = 22,     /*!< CAN1 SCE Interrupt                                                */1 t# }) d# y& P4 Z: {6 f/ I
  42.   EXTI9_5_IRQn                = 23,     /*!< External Line[9:5] Interrupts                                     */, \" R: F0 s( C  r9 D8 R* j; H% B9 f; L9 Y- ]
  43.   TIM1_BRK_TIM9_IRQn          = 24,     /*!< TIM1 Break interrupt and TIM9 global interrupt                    */  t7 \, q* c1 A3 \- U' d
  44.   TIM1_UP_TIM10_IRQn          = 25,     /*!< TIM1 Update Interrupt and TIM10 global interrupt                  */5 z. P, ]1 T7 q0 R" E! E: K) n
  45.   TIM1_TRG_COM_TIM11_IRQn     = 26,     /*!< TIM1 Trigger and Commutation Interrupt and TIM11 global interrupt */* n, w* y, j6 p2 @  n- S
  46.   TIM1_CC_IRQn                = 27,     /*!< TIM1 Capture Compare Interrupt                                    */$ D- F1 q9 b" K9 ]% {/ I) c) L/ b
  47.   TIM2_IRQn                   = 28,     /*!< TIM2 global Interrupt                                             */  F5 [2 O# i' g! L& x8 x. X
  48.   TIM3_IRQn                   = 29,     /*!< TIM3 global Interrupt                                             */
    5 L+ n( i$ }: u7 U& j
  49.   TIM4_IRQn                   = 30,     /*!< TIM4 global Interrupt                                             */' H4 y& C1 Z# x8 U. ?0 p7 X4 s
  50.   I2C1_EV_IRQn                = 31,     /*!< I2C1 Event Interrupt                                              */
    3 a9 d+ l5 E. f" Z( H
  51.   I2C1_ER_IRQn                = 32,     /*!< I2C1 Error Interrupt                                              */6 x5 [' o- M& @5 Q, A" E! x
  52.   I2C2_EV_IRQn                = 33,     /*!< I2C2 Event Interrupt                                              */) K. g0 W6 C# R
  53.   I2C2_ER_IRQn                = 34,     /*!< I2C2 Error Interrupt                                              */
    - t9 i* w5 g# }5 l4 b. B
  54.   SPI1_IRQn                   = 35,     /*!< SPI1 global Interrupt                                             *// p6 g0 ]/ K+ C" H0 l
  55.   SPI2_IRQn                   = 36,     /*!< SPI2 global Interrupt                                             */; X4 D! S/ Z; b* n0 t$ s
  56.   USART1_IRQn                 = 37,     /*!< USART1 global Interrupt                                           */
    ) [, ?5 M5 X' \! q# r  K
  57.   USART2_IRQn                 = 38,     /*!< USART2 global Interrupt                                           */
    ' @; y4 [2 v) f1 d$ w+ ?2 V3 Z* a) ^
  58.   USART3_IRQn                 = 39,     /*!< USART3 global Interrupt                                           */
    ( h3 V4 O0 N0 H9 |- I
  59.   EXTI15_10_IRQn              = 40,     /*!< External Line[15:10] Interrupts                                   */
    ' z: e) [( v3 P) ]! T" q3 X1 ?
  60.   RTC_Alarm_IRQn              = 41,     /*!< RTC Alarm (A and B) through EXTI Line Interrupt                   */6 U3 \# j/ S, p0 b
  61.   OTG_FS_WKUP_IRQn            = 42,     /*!< USB OTG FS Wakeup through EXTI line interrupt                     */
    6 {, W, R* s! p9 e& x# q/ Q
  62.   TIM8_BRK_TIM12_IRQn         = 43,     /*!< TIM8 Break Interrupt and TIM12 global interrupt                   */
    6 M: A4 c( x1 p. X4 z) V
  63.   TIM8_UP_TIM13_IRQn          = 44,     /*!< TIM8 Update Interrupt and TIM13 global interrupt                  */( O  A( V$ y# X* {- k
  64.   TIM8_TRG_COM_TIM14_IRQn     = 45,     /*!< TIM8 Trigger and Commutation Interrupt and TIM14 global interrupt */
    ; s- p4 N/ f, v) c
  65.   TIM8_CC_IRQn                = 46,     /*!< TIM8 Capture Compare Interrupt                                    */, ?8 V0 i1 E8 y# c+ R6 Q
  66.   DMA1_Stream7_IRQn           = 47,     /*!< DMA1 Stream7 Interrupt                                            */
    2 D( r9 F0 |+ X5 A
  67.   FSMC_IRQn                   = 48,     /*!< FSMC global Interrupt                                             */
    3 ?+ B9 V+ z+ H$ E6 I1 J8 t
  68.   SDIO_IRQn                   = 49,     /*!< SDIO global Interrupt                                             */
    5 X9 J. y; G; `0 N4 ~% K. E
  69.   TIM5_IRQn                   = 50,     /*!< TIM5 global Interrupt                                             */" N; e. _3 ~- {8 t! F8 f
  70.   SPI3_IRQn                   = 51,     /*!< SPI3 global Interrupt                                             */* @1 W4 d1 X9 L
  71.   UART4_IRQn                  = 52,     /*!< UART4 global Interrupt                                            */" u4 ~$ O& p, |8 l
  72.   UART5_IRQn                  = 53,     /*!< UART5 global Interrupt                                            */
    - G4 b1 q& s3 t
  73.   TIM6_DAC_IRQn               = 54,     /*!< TIM6 global and DAC1&2 underrun error  interrupts                 */! s3 r  K4 _% n
  74.   TIM7_IRQn                   = 55,     /*!< TIM7 global interrupt                                             */8 K. Y' d# |0 q4 ?: O
  75.   DMA2_Stream0_IRQn           = 56,     /*!< DMA2 Stream 0 global Interrupt                                    */
    8 G' o* e2 w, [" Z$ D
  76.   DMA2_Stream1_IRQn           = 57,     /*!< DMA2 Stream 1 global Interrupt                                    */
    5 l4 \. w* f! _& P3 M; b4 n5 O
  77.   DMA2_Stream2_IRQn           = 58,     /*!< DMA2 Stream 2 global Interrupt                                    */% u% I, u; _, }5 g9 r: P
  78.   DMA2_Stream3_IRQn           = 59,     /*!< DMA2 Stream 3 global Interrupt                                    */4 u: c6 `1 _% F: p
  79.   DMA2_Stream4_IRQn           = 60,     /*!< DMA2 Stream 4 global Interrupt                                    */) g- A! l0 p: E  i8 o
  80.   ETH_IRQn                    = 61,     /*!< Ethernet global Interrupt                                         */6 K- [# B+ S; S
  81.   ETH_WKUP_IRQn               = 62,     /*!< Ethernet Wakeup through EXTI line Interrupt                       */
    8 B6 H, I* s; u5 X. P8 i
  82.   CAN2_TX_IRQn                = 63,     /*!< CAN2 TX Interrupt                                                 */+ o, u4 R" U; z: H
  83.   CAN2_RX0_IRQn               = 64,     /*!< CAN2 RX0 Interrupt                                                */
    * d7 T; M4 r. U4 W
  84.   CAN2_RX1_IRQn               = 65,     /*!< CAN2 RX1 Interrupt                                                */
    % e+ M' Y) x$ e1 }7 L4 U) Z& x; o
  85.   CAN2_SCE_IRQn               = 66,     /*!< CAN2 SCE Interrupt                                                */
    9 L( [8 e) C; o( c3 t
  86.   OTG_FS_IRQn                 = 67,     /*!< USB OTG FS global Interrupt                                       */
    ! f9 R. t5 i; r# C
  87.   DMA2_Stream5_IRQn           = 68,     /*!< DMA2 Stream 5 global interrupt                                    */7 }% ^- e4 E9 c) w
  88.   DMA2_Stream6_IRQn           = 69,     /*!< DMA2 Stream 6 global interrupt                                    */" F; M1 N% r7 v5 F) g
  89.   DMA2_Stream7_IRQn           = 70,     /*!< DMA2 Stream 7 global interrupt                                    */
    5 c% G: d" H3 ?
  90.   USART6_IRQn                 = 71,     /*!< USART6 global interrupt                                           */
    # W* _6 x/ u: Y% I
  91.   I2C3_EV_IRQn                = 72,     /*!< I2C3 event interrupt                                              */4 |/ q. |4 j) i8 X! Z
  92.   I2C3_ER_IRQn                = 73,     /*!< I2C3 error interrupt                                              */
    5 L) z4 N7 h5 S, e
  93.   OTG_HS_EP1_OUT_IRQn         = 74,     /*!< USB OTG HS End Point 1 Out global interrupt                       */
    0 v5 y( I3 ?# G5 x
  94.   OTG_HS_EP1_IN_IRQn          = 75,     /*!< USB OTG HS End Point 1 In global interrupt                        */( k- F, b- \( v" A& Q9 f
  95.   OTG_HS_WKUP_IRQn            = 76,     /*!< USB OTG HS Wakeup through EXTI interrupt                          */1 O9 [( ?7 [9 q4 d$ J: t. a
  96.   OTG_HS_IRQn                 = 77,     /*!< USB OTG HS global interrupt                                       */
    7 i3 A. O: |  t3 O
  97.   DCMI_IRQn                   = 78,     /*!< DCMI global interrupt                                             */
    % N/ B! o- d6 w! z$ y1 e) l( h
  98.   CRYP_IRQn                   = 79,     /*!< CRYP crypto global interrupt                                      */
    1 ?" T+ I7 w$ e
  99.   HASH_RNG_IRQn               = 80,     /*!< Hash and Rng global interrupt                                     */( C! ]* `5 m4 t' k5 ?
  100.   FPU_IRQn                    = 81      /*!< FPU global interrupt                                              */, e- Z- \1 P7 m5 H6 A' N' c6 }
  101. #endif /* STM32F40_41xxx */
复制代码

1 W6 F, K8 |" m5 ?1 o05. 相关函数, r& K& q; _6 s" L4 j
  1. /* Exported macro ------------------------------------------------------------*/3 H6 |8 p3 ?* p1 I: m
  2. /* Exported functions --------------------------------------------------------*/
    $ {! E" I3 ?, S

  3. $ d5 ]( O/ P, I' b! b9 a0 j
  4. void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);3 W6 v0 n# Q4 E7 _' p1 l/ {7 J8 [; t
  5. void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
    $ p2 g1 E+ y" W# ]2 O/ S
  6. void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);: T; a7 S( F7 O
  7. void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState);5 P; w+ }, A" m% K9 V; D( ?+ b
  8. 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
收藏 评论0 发布时间:2022-6-13 10:30

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版