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

【经验分享】使用LL库对STM32L0编程时,外设中断不起作用怎么回事

[复制链接]
STMCU小助手 发布时间:2021-11-19 22:00
使用LL库编程时,发现外设中断即使使能也进不了中断。5 B- b+ s2 }+ y" ?6 H7 k' M+ V
一般外设都会有自己的寄存器来控制中断的开关,比如ADC 中断使能寄存器 (ADC_IER),但是,将里面相应的位置位后,中断仍然不能相应。2 g  ^  F8 J: h6 y' r, |' B
这是因为总的NVIC开关没有打开。这点也好理解。有过STM32开发经验的人都知道,NVIC有开关来控制外设的中断使能。但是在LL库如何实现呢?+ a: Q( z+ Y1 C" f4 `
翻遍了LL库并没有相应的函数。因为NVIC属于CORTEX内核的东西,外设函数是触摸不到的。(而HAL库是有类似的函数的)5 n5 l" `3 U7 B) Z+ e* g

5 Q: {3 @+ u: R; g, Y$ x% J以下是NVIC寄存器# s% t- @; W& i3 O$ n! @; o- d
3 `* e' y4 j  a1 h
20180920135656668.png
7 y% x& O6 w1 H* ^
, @/ O/ X6 p  B# n: g2 Q4 t4 G
下图是对NVIC操作的函数
4 ]+ x3 W6 d9 l! X) f4 B! H7 o
20180920135627860.png
2 P8 t" c# @3 I( `: W8 H. `
0 ]- U; g( s9 J. D
下面是各个中断的序号
  F# y# p- X& W. s8 X6 D2 k8 t3 F  X/ ], r1 z' I$ E5 j
  1. /** @addtogroup Peripheral_interrupt_number_definition
    1 M! f8 y1 h: U0 x; ^, D, N/ h$ J
  2.   * @{4 F. x9 _5 ^. m1 o$ l$ B
  3.   */
    & A; r* _8 d' ^6 Z0 ^" B0 _: g
  4. / v/ Q1 r+ T% P6 E9 g& ]
  5. /**/ M( f# M3 _' A3 N
  6. * @brief stm32l011xx Interrupt Number Definition, according to the selected device , e4 X$ U$ n2 K/ b
  7. *        in @ref Library_configuration_section
    & j8 N8 ^$ G" z/ v& p+ f
  8. */
    3 g8 c, s- ]9 x6 m3 Y5 F
  9. . E4 x  }- L/ F# Y  k; |- O9 W
  10. /*!< Interrupt Number Definition */
    + [% R  [, a: N9 d' }: M
  11. typedef enum, m, y0 N. W+ K: q! t2 x! u
  12. {5 D6 ?7 |  ]. d0 p; Y
  13. /******  Cortex-M0 Processor Exceptions Numbers ******************************************************/+ E; @6 ]9 p5 \. y# h
  14.   NonMaskableInt_IRQn         = -14,    /*!< 2 Non Maskable Interrupt                                */
    7 ~/ G/ P+ B3 ~7 e' z4 d
  15.   HardFault_IRQn              = -13,    /*!< 3 Cortex-M0+ Hard Fault Interrupt                       */: R+ i" B( s" Q% p5 I4 r* u
  16.   SVC_IRQn                    = -5,     /*!< 11 Cortex-M0+ SV Call Interrupt                         */
    : _" P* {! o" `  G
  17.   PendSV_IRQn                 = -2,     /*!< 14 Cortex-M0+ Pend SV Interrupt                         */' d) C9 d* ~3 D7 p
  18.   SysTick_IRQn                = -1,     /*!< 15 Cortex-M0+ System Tick Interrupt                     */4 }; O7 l; E( \; s$ ?' K6 s

  19. % l& _! y; z5 D2 s
  20. /******  STM32L-0 specific Interrupt Numbers *********************************************************/
    " `& H1 N- i% h9 N# h
  21.   WWDG_IRQn                   = 0,      /*!< Window WatchDog Interrupt                               */$ D" t! y! s9 j6 L  Z
  22.   PVD_IRQn                    = 1,      /*!< PVD through EXTI Line detect Interrupt                  */* |, w2 K1 ?; m5 i$ v5 H% C/ i
  23.   RTC_IRQn                    = 2,      /*!< RTC through EXTI Line Interrupt                         */0 X5 t5 G* R9 p2 g( k" p0 l8 D
  24.   FLASH_IRQn                  = 3,      /*!< FLASH Interrupt                                         */
    * u; @' q2 [+ m5 N
  25.   RCC_IRQn                    = 4,      /*!< RCC Interrupt                                           */3 W0 @: I& f' a+ d  D: f  o8 w
  26.   EXTI0_1_IRQn                = 5,      /*!< EXTI Line 0 and 1 Interrupts                            */
    ) {3 {! p* B* F- s$ M2 Q
  27.   EXTI2_3_IRQn                = 6,      /*!< EXTI Line 2 and 3 Interrupts                            */& B, Y8 h; C% Z: D  i  a2 t
  28.   EXTI4_15_IRQn               = 7,      /*!< EXTI Line 4 to 15 Interrupts                            */
    ; t0 M$ |* S9 a( G
  29.   DMA1_Channel1_IRQn          = 9,      /*!< DMA1 Channel 1 Interrupt                                */" p# `: g  N2 {" H* X. B
  30.   DMA1_Channel2_3_IRQn        = 10,     /*!< DMA1 Channel 2 and Channel 3 Interrupts                 */7 S: B5 ~" t$ L' y
  31.   DMA1_Channel4_5_6_7_IRQn    = 11,     /*!< DMA1 Channel 4, Channel 5, Channel 6 and Channel 7 Interrupts */
    ( @5 Z) W9 C/ N% g
  32.   ADC1_COMP_IRQn              = 12,     /*!< ADC1, COMP1 and COMP2 Interrupts                        */
    / l9 j) K% b! V$ f
  33.   LPTIM1_IRQn                 = 13,     /*!< LPTIM1 Interrupt                                        */
    / ?/ N) S! D: M% @2 g/ y
  34.   TIM2_IRQn                   = 15,     /*!< TIM2 Interrupt                                          */
    - ?+ S2 I5 @4 R
  35.   TIM21_IRQn                  = 20,     /*!< TIM21 Interrupt                                         */2 G# f) b6 \. F1 R, W' o
  36.   I2C1_IRQn                   = 23,     /*!< I2C1 Interrupt                                          */6 v7 B% u2 g6 {3 e" t) A$ n2 y
  37.   SPI1_IRQn                   = 25,     /*!< SPI1 Interrupt                                          */
    ) t: U# w7 a+ R6 F9 S0 ?
  38.   USART2_IRQn                 = 28,     /*!< USART2 Interrupt                                        */
    * g. p% K9 m$ m1 W) I: C. K
  39.   LPUART1_IRQn                = 29,     /*!< LPUART1 Interrupt                                       */: v/ O, O4 G- |3 p
  40. } IRQn_Type;
复制代码
. A4 i! s$ Z. o' q/ x7 v" m' |1 `
例如将ADC1中断使能,除了对ADC1内部的相应中断位(ADC_IER)使能外,还需要使用下列语句才可以:' J( b8 M4 _+ Q  L& B3 v$ w

! @, O9 B4 f1 w5 H8 g: n4 RNVIC_EnableIRQ(ADC1_COMP_IRQn);/ i& z9 N% n0 ^1 d0 C! C
6 A, Q0 G+ W$ _  K2 u
- O5 s* C& _, z" Z; h" n) _2 l

/ _" u; @0 ?( o
收藏 评论0 发布时间:2021-11-19 22:00

举报

0个回答

所属标签

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