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

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

[复制链接]
STMCU小助手 发布时间:2022-4-1 15:20
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
  1. /** \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC)." Y) m- E8 z. U; d
  2. */
    - y. ?1 g* t  D
  3. typedef struct) J! _, B7 u3 }. O9 K5 ]) \
  4. {. j3 k- `) \5 u+ Z  a
  5.   __IO uint32_t ISER[8];                 /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register           */+ v% |: b/ K1 t0 Q( ~3 o& ~
  6.        uint32_t RESERVED0[24];( w( R8 W( h: B9 [! f1 u
  7.   __IO uint32_t ICER[8];                 /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register         */9 Y7 J, X$ T' x7 o$ [
  8.        uint32_t RSERVED1[24];# m1 w0 ^1 i0 u3 S% L
  9.   __IO uint32_t ISPR[8];                 /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register          */
    * I+ j0 @9 _- i4 k
  10.        uint32_t RESERVED2[24];+ s, B; f1 n0 \0 g' M9 C
  11.   __IO uint32_t ICPR[8];                 /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register        */( i; t* b6 p9 S0 {5 O! i
  12.        uint32_t RESERVED3[24];  T* V7 J. f$ o4 E
  13.   __IO uint32_t IABR[8];                 /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register           */
    / c  E1 U' Q+ i) M( _/ d
  14.        uint32_t RESERVED4[56];
    ; W' o% g; M; o% R9 A  J4 |
  15.   __IO uint8_t  IP[240];                 /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) *// Q$ B$ P( }# _7 m& g5 X
  16.        uint32_t RESERVED5[644];
    7 o# e+ Q) l8 m# g9 V" H8 Y1 _
  17.   __O  uint32_t STIR;                    /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register     */
    " n0 V! U0 f0 f' m
  18. }  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 20200823164432912.png
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
  1. /** , B0 C7 E: M' L$ \. B
  2.   * @brief  NVIC Init Structure definition  3 Y/ H" s2 R. J0 a) B' c9 }% H3 R
  3.   */6 ]  p& J, Z+ `# f- K0 o9 s# L

  4. : w. l- {7 {; a& Z3 N! K
  5. typedef struct  n5 D. m6 Q6 S; _
  6. {  O6 `3 I/ D! g, l6 c
  7.   uint8_t NVIC_IRQChannel;                    /*!< Specifies the IRQ channel to be enabled or disabled.% R0 s1 g+ L/ M4 ]
  8.                                                    This parameter can be an enumerator of @ref IRQn_Type - f( N* s* d% v
  9.                                                    enumeration (For the complete STM32 Devices IRQ Channels
    7 F/ s, x! y6 `+ u2 S7 X" d
  10.                                                    list, please refer to stm32f4xx.h file) */: |/ H5 g  R  I* R
  11. . V" E6 e; u7 U' r+ K; A9 c
  12.   uint8_t NVIC_IRQChannelPreemptionPriority;  /*!< Specifies the pre-emption priority for the IRQ channel# k2 ?. \& V3 _
  13.                                                    specified in NVIC_IRQChannel. This parameter can be a value
    , L* d3 h5 q( j. I4 ?$ e% o6 E
  14.                                                    between 0 and 15 as described in the table @ref MISC_NVIC_Priority_Table
    5 ~: R$ n! [7 b
  15.                                                    A lower priority value indicates a higher priority */3 ~, }7 u6 X4 p4 B' |$ p

  16. $ U# x# F  T* r& A, V
  17.   uint8_t NVIC_IRQChannelSubPriority;         /*!< Specifies the subpriority level for the IRQ channel specified
      s5 o9 [- k2 k2 }
  18.                                                    in NVIC_IRQChannel. This parameter can be a value1 z  X! b" {3 E$ m0 P: c
  19.                                                    between 0 and 15 as described in the table @ref MISC_NVIC_Priority_Table
    2 V+ U) w, K5 w8 g6 J6 y* a
  20.                                                    A lower priority value indicates a higher priority */
    4 X4 S1 F5 L$ |

  21. , S* t) N3 y* T, a: W6 B
  22.   FunctionalState NVIC_IRQChannelCmd;         /*!< Specifies whether the IRQ channel defined in NVIC_IRQChannel1 B% Q8 I! p" Y3 Y; e! b! |
  23.                                                    will be enabled or disabled. 1 k# T  S' f4 e+ O
  24.                                                    This parameter can be set either to ENABLE or DISABLE */     _: z% F7 O. d
  25. } NVIC_InitTypeDef;
复制代码

, }6 o% Y8 I9 s  p4 ^MISC_Vector_Table_Base
  1. /** @defgroup MISC_Vector_Table_Base
    : v; k. T- D3 Q/ }- ^9 g
  2.   * @{/ W7 i0 I+ F: J3 `7 c7 z5 C
  3.   */5 C( W: T* w! |  {7 w+ J; M
  4. ) h9 z' Z# L5 e% Z4 L. c# N
  5. #define NVIC_VectTab_RAM             ((uint32_t)0x20000000)
    6 j* E8 L" d; A' H- Q
  6. #define NVIC_VectTab_FLASH           ((uint32_t)0x08000000)1 A: ?+ z1 ^( q2 ]
  7. #define IS_NVIC_VECTTAB(VECTTAB) (((VECTTAB) == NVIC_VectTab_RAM) || \3 E3 Y" p( A) e' J3 y
  8.                                   ((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
  1. /** @defgroup MISC_System_Low_Power 9 m4 _) [7 K! g8 X' r
  2.   * @{6 Y6 Q( M% N2 \: `! o
  3.   */% [3 F3 O2 ^3 o) Q

  4. 6 |6 H' F  b& L0 {# _
  5. #define NVIC_LP_SEVONPEND            ((uint8_t)0x10)
    9 G% W9 Y6 Z' }9 L6 v" R
  6. #define NVIC_LP_SLEEPDEEP            ((uint8_t)0x04)# B7 Z! p8 z9 p
  7. #define NVIC_LP_SLEEPONEXIT          ((uint8_t)0x02)! @: d( Q& {2 t, A+ J# K) V
  8. #define IS_NVIC_LP(LP) (((LP) == NVIC_LP_SEVONPEND) || \
    8 v/ }2 ~2 s+ i, E: c' H
  9.                         ((LP) == NVIC_LP_SLEEPDEEP) || \
    : m' i( }& p1 N: ]% O
  10.                         ((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
  1. /** @defgroup MISC_Preemption_Priority_Group
    : ?9 M# @1 U# Y  m5 G# W, T  ~1 F' ^
  2.   * @{
    4 ]( E7 V. r: R5 D
  3.   */
    3 m1 s4 r6 ]+ d  U; K8 _& K
  4.   l/ ~$ {1 M# c) F# J' ~7 R/ J
  5. #define NVIC_PriorityGroup_0         ((uint32_t)0x700) /*!< 0 bits for pre-emption priority
    9 e3 {9 u8 M  r. r
  6.                                                             4 bits for subpriority */. F- W# [4 Z% r/ B
  7. #define NVIC_PriorityGroup_1         ((uint32_t)0x600) /*!< 1 bits for pre-emption priority% z5 t8 s* v* i- g: J
  8.                                                             3 bits for subpriority */
    0 _" a$ Q( }$ V) F* ^9 [
  9. #define NVIC_PriorityGroup_2         ((uint32_t)0x500) /*!< 2 bits for pre-emption priority
    4 L/ `5 t2 Q& q
  10.                                                             2 bits for subpriority */1 ]! D! w- D- i4 X5 }* n, D
  11. #define NVIC_PriorityGroup_3         ((uint32_t)0x400) /*!< 3 bits for pre-emption priority
    " ~. f8 E( N; T" i; F
  12.                                                             1 bits for subpriority */
    % F6 z! V5 S% ^6 r; G4 @
  13. #define NVIC_PriorityGroup_4         ((uint32_t)0x300) /*!< 4 bits for pre-emption priority5 D7 \4 T8 p% n
  14.                                                             0 bits for subpriority */4 N8 x6 [$ |; D

  15.   w6 G7 s2 g4 t" S4 S  q  J
  16. #define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PriorityGroup_0) || \4 T+ \( N! j, I% P7 i
  17.                                        ((GROUP) == NVIC_PriorityGroup_1) || \! Q* l& Z( `+ t' f! N
  18.                                        ((GROUP) == NVIC_PriorityGroup_2) || \
    ; A5 q7 N# A  n, X+ V
  19.                                        ((GROUP) == NVIC_PriorityGroup_3) || \
    ! h" [7 q" t( M* X! F+ Y3 [8 b+ ]
  20.                                        ((GROUP) == NVIC_PriorityGroup_4))
    . d* w1 q% ]$ `' i
  21. ; ~- P: ~9 j7 a$ W3 }7 m3 f8 ~# o( y) g
  22. #define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY)  ((PRIORITY) < 0x10)3 v3 T) [- G4 a

  23. 1 T+ c% r! t/ r
  24. #define IS_NVIC_SUB_PRIORITY(PRIORITY)  ((PRIORITY) < 0x10)
    . r. j* j+ R2 W( n, M4 g; K' D
  25. ' g5 _/ `* C. G0 \
  26. #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
  1. /** @defgroup MISC_SysTick_clock_source 1 l5 I, R# g& E1 S5 m9 Z( @0 q# ]
  2.   * @{
    ( _; Q  L) E: ?/ v3 V
  3.   */
    7 D9 |* b& J9 z9 ]! M. G, L

  4. , q. d: ^  S) t, P9 ~
  5. #define SysTick_CLKSource_HCLK_Div8    ((uint32_t)0xFFFFFFFB)& U# ]1 ?; z2 r4 a+ f! V/ d
  6. #define SysTick_CLKSource_HCLK         ((uint32_t)0x00000004)
    ' d, y5 k2 J, y* a
  7. #define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SysTick_CLKSource_HCLK) || \: c  e# k8 W6 b: I7 E
  8.                                        ((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" ?
  1. /*** ~  p1 c! X  e+ A
  2. * @brief STM32F4XX Interrupt Number Definition, according to the selected device & }1 S$ Z2 s) G/ ^$ K
  3. *        in @ref Library_configuration_section " Q  X7 s0 }) u& |% c, v% b# W0 N/ ~
  4. */
    4 j7 Y& K; v. U- i
  5. typedef enum IRQn+ `. b( K2 p9 ~! I, f
  6. {; K  v% t* P4 K- s
  7. /******  Cortex-M4 Processor Exceptions Numbers ****************************************************************/
    4 `  M5 H) u  W3 N! i
  8.   NonMaskableInt_IRQn         = -14,    /*!< 2 Non Maskable Interrupt                                          */
    # M- S6 C7 Y& e- i5 Z) p) U% Q' l
  9.   MemoryManagement_IRQn       = -12,    /*!< 4 Cortex-M4 Memory Management Interrupt                           */
    / R9 j/ N1 ^0 L2 d- V
  10.   BusFault_IRQn               = -11,    /*!< 5 Cortex-M4 Bus Fault Interrupt                                   */' l3 N8 P  Z3 _" n2 q
  11.   UsageFault_IRQn             = -10,    /*!< 6 Cortex-M4 Usage Fault Interrupt                                 */# u. c1 k! v' ]% z4 o8 \) Z8 V3 c6 G5 y
  12.   SVCall_IRQn                 = -5,     /*!< 11 Cortex-M4 SV Call Interrupt                                    */
    * G$ s  `. K6 Y) W! H
  13.   DebugMonitor_IRQn           = -4,     /*!< 12 Cortex-M4 Debug Monitor Interrupt                              */
    % g; B. K. `; a  ^
  14.   PendSV_IRQn                 = -2,     /*!< 14 Cortex-M4 Pend SV Interrupt                                    */6 B" D4 s+ t9 Y+ }
  15.   SysTick_IRQn                = -1,     /*!< 15 Cortex-M4 System Tick Interrupt                                */. l, k5 f7 c% n4 x
  16. /******  STM32 specific Interrupt Numbers **********************************************************************/9 L" g/ f  Q! k1 _
  17.   WWDG_IRQn                   = 0,      /*!< Window WatchDog Interrupt                                         */1 j9 ]/ M* _, F0 D# O
  18.   PVD_IRQn                    = 1,      /*!< PVD through EXTI Line detection Interrupt                         */
    ' T/ ~' S) ^4 E' F7 }1 R3 B
  19.   TAMP_STAMP_IRQn             = 2,      /*!< Tamper and TimeStamp interrupts through the EXTI line             */, K3 o. t" Z  k! _1 L5 w. e$ V1 G/ c
  20.   RTC_WKUP_IRQn               = 3,      /*!< RTC Wakeup interrupt through the EXTI line                        */
    " G( a; _2 n0 H8 j* S* p
  21.   FLASH_IRQn                  = 4,      /*!< FLASH global Interrupt                                            */. p7 u6 x3 F) h# a3 O& Y
  22.   RCC_IRQn                    = 5,      /*!< RCC global Interrupt                                              */$ a: ^% F. Z& Q2 L7 r2 N
  23.   EXTI0_IRQn                  = 6,      /*!< EXTI Line0 Interrupt                                              */5 M# A6 d% Y; ]2 b; h- k+ D4 S
  24.   EXTI1_IRQn                  = 7,      /*!< EXTI Line1 Interrupt                                              */
    * |3 o5 K$ d8 q( N3 U) K: h$ C
  25.   EXTI2_IRQn                  = 8,      /*!< EXTI Line2 Interrupt                                              */9 h. G9 h/ _/ }7 r6 f4 j4 W
  26.   EXTI3_IRQn                  = 9,      /*!< EXTI Line3 Interrupt                                              */
    / }' L- i0 s* G7 D+ u$ g9 W
  27.   EXTI4_IRQn                  = 10,     /*!< EXTI Line4 Interrupt                                              */7 R: E+ X# s+ h: U) e$ u$ \
  28.   DMA1_Stream0_IRQn           = 11,     /*!< DMA1 Stream 0 global Interrupt                                    */
    ( y  Y0 y( N3 `3 w; e9 i0 k5 P+ H
  29.   DMA1_Stream1_IRQn           = 12,     /*!< DMA1 Stream 1 global Interrupt                                    */* b* n* y  U  W/ D- o
  30.   DMA1_Stream2_IRQn           = 13,     /*!< DMA1 Stream 2 global Interrupt                                    */
      C( g6 v) W9 H2 j
  31.   DMA1_Stream3_IRQn           = 14,     /*!< DMA1 Stream 3 global Interrupt                                    */* {8 C5 f6 ]- n  b4 t/ V
  32.   DMA1_Stream4_IRQn           = 15,     /*!< DMA1 Stream 4 global Interrupt                                    */" x8 d: n$ d3 I0 B, H
  33.   DMA1_Stream5_IRQn           = 16,     /*!< DMA1 Stream 5 global Interrupt                                    */
    7 W& L6 i5 N5 e) ~; T0 F
  34.   DMA1_Stream6_IRQn           = 17,     /*!< DMA1 Stream 6 global Interrupt                                    */3 U) t% B& O8 Q7 F, `
  35.   ADC_IRQn                    = 18,     /*!< ADC1, ADC2 and ADC3 global Interrupts                             */$ ]0 g# V+ G9 I3 _  S8 o

  36. " B) o' V2 k4 a+ [* h, L* R
  37. #if defined(STM32F40_41xxx)
    # \. @( ~# n- C8 j' a
  38.   CAN1_TX_IRQn                = 19,     /*!< CAN1 TX Interrupt                                                 */  ?+ I: F2 x3 d& N; B  h
  39.   CAN1_RX0_IRQn               = 20,     /*!< CAN1 RX0 Interrupt                                                */
    9 O3 o  g+ M5 R. u0 J
  40.   CAN1_RX1_IRQn               = 21,     /*!< CAN1 RX1 Interrupt                                                */! }$ y6 C; q6 o( g  U" l
  41.   CAN1_SCE_IRQn               = 22,     /*!< CAN1 SCE Interrupt                                                */7 C. o" S7 `& a3 L4 m) r
  42.   EXTI9_5_IRQn                = 23,     /*!< External Line[9:5] Interrupts                                     */0 d) Y2 Z, Z) Y, F- d7 p
  43.   TIM1_BRK_TIM9_IRQn          = 24,     /*!< TIM1 Break interrupt and TIM9 global interrupt                    */
    / D7 z' E1 G- l, }, n7 Z+ A
  44.   TIM1_UP_TIM10_IRQn          = 25,     /*!< TIM1 Update Interrupt and TIM10 global interrupt                  */- K, i8 r* ?: f6 X
  45.   TIM1_TRG_COM_TIM11_IRQn     = 26,     /*!< TIM1 Trigger and Commutation Interrupt and TIM11 global interrupt */  d6 f4 A  L1 u3 M
  46.   TIM1_CC_IRQn                = 27,     /*!< TIM1 Capture Compare Interrupt                                    */
      n; ]' c( e, o
  47.   TIM2_IRQn                   = 28,     /*!< TIM2 global Interrupt                                             */
    * u; X! y- I4 n
  48.   TIM3_IRQn                   = 29,     /*!< TIM3 global Interrupt                                             */
    * F/ e% |! `9 q$ w4 o
  49.   TIM4_IRQn                   = 30,     /*!< TIM4 global Interrupt                                             */
    0 f: ]( b# z, K; A8 N
  50.   I2C1_EV_IRQn                = 31,     /*!< I2C1 Event Interrupt                                              */& w% F) }+ |, |- g* e( c
  51.   I2C1_ER_IRQn                = 32,     /*!< I2C1 Error Interrupt                                              */
    : j# U9 Y; b! c0 \, L+ k
  52.   I2C2_EV_IRQn                = 33,     /*!< I2C2 Event Interrupt                                              */) m0 I) V) H3 i5 I
  53.   I2C2_ER_IRQn                = 34,     /*!< I2C2 Error Interrupt                                              */! J" Q3 q0 a9 R% D+ Z$ w
  54.   SPI1_IRQn                   = 35,     /*!< SPI1 global Interrupt                                             */; C$ ~$ K% I6 u  w3 M
  55.   SPI2_IRQn                   = 36,     /*!< SPI2 global Interrupt                                             */8 N- M; ~, V2 _% {8 u
  56.   USART1_IRQn                 = 37,     /*!< USART1 global Interrupt                                           */9 }; U' w4 W8 F8 ?0 K5 r) |7 E/ \
  57.   USART2_IRQn                 = 38,     /*!< USART2 global Interrupt                                           */
    # B6 `9 J. m3 l( u6 |& j! F
  58.   USART3_IRQn                 = 39,     /*!< USART3 global Interrupt                                           */0 l3 G3 \: b# J5 W4 R
  59.   EXTI15_10_IRQn              = 40,     /*!< External Line[15:10] Interrupts                                   */
    , u7 N+ n/ n/ \7 B, w5 s
  60.   RTC_Alarm_IRQn              = 41,     /*!< RTC Alarm (A and B) through EXTI Line Interrupt                   */
    1 x. ~$ ^- G6 C2 O& Y' Q- _$ p
  61.   OTG_FS_WKUP_IRQn            = 42,     /*!< USB OTG FS Wakeup through EXTI line interrupt                     */! _& T1 s! X8 s" O( a& A
  62.   TIM8_BRK_TIM12_IRQn         = 43,     /*!< TIM8 Break Interrupt and TIM12 global interrupt                   */" o5 M* v  u! U) h' u5 c" R
  63.   TIM8_UP_TIM13_IRQn          = 44,     /*!< TIM8 Update Interrupt and TIM13 global interrupt                  */6 t) z( c7 j; S7 s: q
  64.   TIM8_TRG_COM_TIM14_IRQn     = 45,     /*!< TIM8 Trigger and Commutation Interrupt and TIM14 global interrupt */
    , ^) H) k5 L/ U8 m3 y+ i8 f5 Q
  65.   TIM8_CC_IRQn                = 46,     /*!< TIM8 Capture Compare Interrupt                                    */6 M/ L, I' P7 e  J
  66.   DMA1_Stream7_IRQn           = 47,     /*!< DMA1 Stream7 Interrupt                                            */+ u+ F+ p4 q8 p4 D1 w  h
  67.   FSMC_IRQn                   = 48,     /*!< FSMC global Interrupt                                             */  F' z8 ~8 D/ F
  68.   SDIO_IRQn                   = 49,     /*!< SDIO global Interrupt                                             */
    & E4 h8 H5 F+ e4 \% ^8 v
  69.   TIM5_IRQn                   = 50,     /*!< TIM5 global Interrupt                                             */1 G' Y, N4 m8 R% I
  70.   SPI3_IRQn                   = 51,     /*!< SPI3 global Interrupt                                             */
    6 C* W' j) N9 A$ R- t! a
  71.   UART4_IRQn                  = 52,     /*!< UART4 global Interrupt                                            */+ T+ \, w# Z8 @
  72.   UART5_IRQn                  = 53,     /*!< UART5 global Interrupt                                            *// S# W5 u  I1 k) N2 e0 s
  73.   TIM6_DAC_IRQn               = 54,     /*!< TIM6 global and DAC1&2 underrun error  interrupts                 */' h- A) k4 a& E6 |% v' t
  74.   TIM7_IRQn                   = 55,     /*!< TIM7 global interrupt                                             */
    2 F1 P  _8 D3 |" g* {
  75.   DMA2_Stream0_IRQn           = 56,     /*!< DMA2 Stream 0 global Interrupt                                    */
    6 c* f3 r* ^- u: c
  76.   DMA2_Stream1_IRQn           = 57,     /*!< DMA2 Stream 1 global Interrupt                                    */
    * n$ P9 Y7 H, T
  77.   DMA2_Stream2_IRQn           = 58,     /*!< DMA2 Stream 2 global Interrupt                                    */" [9 D4 R' L9 B: _4 Y
  78.   DMA2_Stream3_IRQn           = 59,     /*!< DMA2 Stream 3 global Interrupt                                    */
    - G4 n9 ]+ `8 W
  79.   DMA2_Stream4_IRQn           = 60,     /*!< DMA2 Stream 4 global Interrupt                                    */9 i- i9 \% d0 _3 H
  80.   ETH_IRQn                    = 61,     /*!< Ethernet global Interrupt                                         */
    % q" f$ m) @  R& N3 ?
  81.   ETH_WKUP_IRQn               = 62,     /*!< Ethernet Wakeup through EXTI line Interrupt                       */
    1 v/ |( t. N. A, t/ d
  82.   CAN2_TX_IRQn                = 63,     /*!< CAN2 TX Interrupt                                                 */  W6 P* ^9 [5 q
  83.   CAN2_RX0_IRQn               = 64,     /*!< CAN2 RX0 Interrupt                                                */
      [2 p* z* i( d* m5 }
  84.   CAN2_RX1_IRQn               = 65,     /*!< CAN2 RX1 Interrupt                                                */
    3 c' D7 g7 O5 H. x# J0 j1 e
  85.   CAN2_SCE_IRQn               = 66,     /*!< CAN2 SCE Interrupt                                                */2 l) n- _! r# G  o0 }
  86.   OTG_FS_IRQn                 = 67,     /*!< USB OTG FS global Interrupt                                       */0 q" l4 a- \7 o& p% @( z' v
  87.   DMA2_Stream5_IRQn           = 68,     /*!< DMA2 Stream 5 global interrupt                                    */
    ; Q" h  @4 S# K: }- `4 Q; Y) `
  88.   DMA2_Stream6_IRQn           = 69,     /*!< DMA2 Stream 6 global interrupt                                    */
    ( p) X  s( a$ G8 a$ l6 c1 n
  89.   DMA2_Stream7_IRQn           = 70,     /*!< DMA2 Stream 7 global interrupt                                    */
      u9 T  r# d& E8 V+ q4 r
  90.   USART6_IRQn                 = 71,     /*!< USART6 global interrupt                                           */6 u7 S; I1 S  C" f  w" ~
  91.   I2C3_EV_IRQn                = 72,     /*!< I2C3 event interrupt                                              */) x; S* k9 U1 e+ F3 {) ]: T8 I
  92.   I2C3_ER_IRQn                = 73,     /*!< I2C3 error interrupt                                              */
    8 y; B" I; f; U. x
  93.   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
  94.   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
  95.   OTG_HS_WKUP_IRQn            = 76,     /*!< USB OTG HS Wakeup through EXTI interrupt                          */4 x# Z3 X6 @) k
  96.   OTG_HS_IRQn                 = 77,     /*!< USB OTG HS global interrupt                                       */# ?; X; n! W: @+ }, u0 [; X
  97.   DCMI_IRQn                   = 78,     /*!< DCMI global interrupt                                             */% F* F, N. o+ l3 x) {9 |( b
  98.   CRYP_IRQn                   = 79,     /*!< CRYP crypto global interrupt                                      */
    , q7 K/ X" e+ U2 n7 g* q
  99.   HASH_RNG_IRQn               = 80,     /*!< Hash and Rng global interrupt                                     */) d( `3 v# I2 a& [+ R* G, h
  100.   FPU_IRQn                    = 81      /*!< FPU global interrupt                                              */
    : D9 W/ K  t1 X( d4 B) I" z
  101. #endif /* STM32F40_41xxx */
复制代码

- @+ ]  h( L" Y1 W' y0 x  n' ~05. 相关函数. f/ [- L3 ~$ }# D
  1. /* Exported macro ------------------------------------------------------------*/
    ' y0 L  G$ G' w2 H7 y+ S7 G: s
  2. /* Exported functions --------------------------------------------------------*/; K+ I7 m2 c. b# l& \
  3. 4 o2 f; r$ @% `' q) |* E+ y8 R; A
  4. void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
    1 F0 V2 E& \! D% D0 ~
  5. void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
    ' d" |( `+ x0 p( u) Z
  6. void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);
    , z: D7 m3 V# A4 S
  7. void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState);
      w+ W+ o2 ]5 j# F# J7 Z
  8. void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);
复制代码

, z# L( G# S  r- x5 t4 ?* b; y6 i
收藏 评论0 发布时间:2022-4-1 15:20

举报

0个回答

所属标签

相似分享

官网相关资源

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