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

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

[复制链接]
STMCU小助手 发布时间:2021-11-19 22:00
使用LL库编程时,发现外设中断即使使能也进不了中断。- f  r/ j& i! n
一般外设都会有自己的寄存器来控制中断的开关,比如ADC 中断使能寄存器 (ADC_IER),但是,将里面相应的位置位后,中断仍然不能相应。
( B- j  y, l  L2 k1 S, N2 f/ d这是因为总的NVIC开关没有打开。这点也好理解。有过STM32开发经验的人都知道,NVIC有开关来控制外设的中断使能。但是在LL库如何实现呢?
* P! j6 O- q1 {4 U- }翻遍了LL库并没有相应的函数。因为NVIC属于CORTEX内核的东西,外设函数是触摸不到的。(而HAL库是有类似的函数的)
8 h  r) |7 A9 g# F1 R" j" H
* D8 s3 J% n& X& I3 O7 j: I- @9 x以下是NVIC寄存器
% z) q! h- {- K4 r5 D- v- @# G
# K2 l! v/ X3 \0 E+ b& o% v7 K
20180920135656668.png
% M7 r8 P, v- M4 f; R$ F' U

4 ~) q7 g" M, h, u3 {+ i; P6 w/ \下图是对NVIC操作的函数
! w4 @) x0 a. C, X  a) O. r$ O
20180920135627860.png

7 T  F( K1 M  v% m2 |
4 S- n2 c/ s0 [) p: C6 f3 j% E下面是各个中断的序号
+ P% N) p+ H# g% o5 Z4 k* O; v! r7 {- r' K- I" M5 i7 Y2 k  Z0 s
  1. /** @addtogroup Peripheral_interrupt_number_definition
    9 B3 w8 }1 D! |+ K/ V4 I
  2.   * @{& n5 E; W! t+ q# f
  3.   */" D3 [* X3 i; G; h% g
  4. / e9 I8 @  G6 w3 D' G
  5. /**
    8 N+ j5 w8 e( h# {6 N" r
  6. * @brief stm32l011xx Interrupt Number Definition, according to the selected device : P' I: P/ ]5 Y4 C; x. P' y6 _
  7. *        in @ref Library_configuration_section ; O0 [8 M& J/ g$ E3 s
  8. */
    , q3 Y, }# O+ `0 u6 X

  9. 9 T# o/ ]. P% j& F
  10. /*!< Interrupt Number Definition */9 V4 K3 E, @/ u) f
  11. typedef enum
    # ]1 _5 z' P/ ^+ O
  12. {0 m* _" H4 m: ~* [: F
  13. /******  Cortex-M0 Processor Exceptions Numbers ******************************************************/
      l0 |) H" [" |; N
  14.   NonMaskableInt_IRQn         = -14,    /*!< 2 Non Maskable Interrupt                                */
    ' s  ]; @4 ]0 h: k  u* B8 Z& ~
  15.   HardFault_IRQn              = -13,    /*!< 3 Cortex-M0+ Hard Fault Interrupt                       */4 i2 @. g0 @6 D
  16.   SVC_IRQn                    = -5,     /*!< 11 Cortex-M0+ SV Call Interrupt                         */
    5 \7 b, f/ L. H5 f- U; z
  17.   PendSV_IRQn                 = -2,     /*!< 14 Cortex-M0+ Pend SV Interrupt                         */) [0 H1 S7 b' O  @+ i% I, U- |
  18.   SysTick_IRQn                = -1,     /*!< 15 Cortex-M0+ System Tick Interrupt                     */" L, ?* ^  o9 d6 o5 u. P
  19. 7 F  |8 N. E' j- C+ ^
  20. /******  STM32L-0 specific Interrupt Numbers *********************************************************/' P! K% h# P0 r: O0 q
  21.   WWDG_IRQn                   = 0,      /*!< Window WatchDog Interrupt                               */
    ) b/ s* |- ^0 O4 w# p8 j- S/ i
  22.   PVD_IRQn                    = 1,      /*!< PVD through EXTI Line detect Interrupt                  */
    , X& J4 W4 @% O
  23.   RTC_IRQn                    = 2,      /*!< RTC through EXTI Line Interrupt                         */& M4 q# h8 F( S* G
  24.   FLASH_IRQn                  = 3,      /*!< FLASH Interrupt                                         */3 I8 V  s  U5 M' J: s5 Y- [9 L
  25.   RCC_IRQn                    = 4,      /*!< RCC Interrupt                                           */
    3 _" s4 i7 N4 A! v. b3 N+ V
  26.   EXTI0_1_IRQn                = 5,      /*!< EXTI Line 0 and 1 Interrupts                            */4 i) U8 r" d2 i5 B0 B& s
  27.   EXTI2_3_IRQn                = 6,      /*!< EXTI Line 2 and 3 Interrupts                            */
    7 b6 z  v6 ]6 @( ^, [/ e6 ]
  28.   EXTI4_15_IRQn               = 7,      /*!< EXTI Line 4 to 15 Interrupts                            */6 M6 F- g- p3 v# ]5 w' @# s5 |
  29.   DMA1_Channel1_IRQn          = 9,      /*!< DMA1 Channel 1 Interrupt                                */5 _3 f& [( d5 v8 w) C
  30.   DMA1_Channel2_3_IRQn        = 10,     /*!< DMA1 Channel 2 and Channel 3 Interrupts                 */
    8 I. V/ e  F* n& B6 Z2 Z, |
  31.   DMA1_Channel4_5_6_7_IRQn    = 11,     /*!< DMA1 Channel 4, Channel 5, Channel 6 and Channel 7 Interrupts */
    - Z% A/ w% G; F* P0 ~* b# s3 O2 S4 [0 k% b
  32.   ADC1_COMP_IRQn              = 12,     /*!< ADC1, COMP1 and COMP2 Interrupts                        */
    9 m* _8 u* A( h4 e! y0 \/ n4 G
  33.   LPTIM1_IRQn                 = 13,     /*!< LPTIM1 Interrupt                                        */+ v5 y% V  s  p" t0 y, M
  34.   TIM2_IRQn                   = 15,     /*!< TIM2 Interrupt                                          */
    " l* J0 w) ]9 F& ?# e8 |& \
  35.   TIM21_IRQn                  = 20,     /*!< TIM21 Interrupt                                         */
    + M0 d( c% L# b, l& t5 v. s
  36.   I2C1_IRQn                   = 23,     /*!< I2C1 Interrupt                                          */
    ( z7 S' b7 U" T) B9 l4 M
  37.   SPI1_IRQn                   = 25,     /*!< SPI1 Interrupt                                          */
    4 n# V7 s& O  B3 }2 T4 ?
  38.   USART2_IRQn                 = 28,     /*!< USART2 Interrupt                                        */
    7 N9 M/ L: Y3 ~1 s, k3 f
  39.   LPUART1_IRQn                = 29,     /*!< LPUART1 Interrupt                                       */) }! W5 W2 z" d% P
  40. } IRQn_Type;
复制代码

# J: v* Y1 m9 u; f) V例如将ADC1中断使能,除了对ADC1内部的相应中断位(ADC_IER)使能外,还需要使用下列语句才可以:. p+ B) K9 Z2 Y' w/ R% o
8 z4 r$ q; `, Y- Z. e
NVIC_EnableIRQ(ADC1_COMP_IRQn);" r( B4 A  O( {" V0 I) n$ ^

$ y6 U3 G0 c1 U; q0 y4 Z  U' k! p. N( ]3 }, `  F% J& K  E. A* m6 X
" t% p4 Q6 H( L' \: A3 q2 e8 @
收藏 评论0 发布时间:2021-11-19 22:00

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版