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

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

[复制链接]
STMCU小助手 发布时间:2021-11-19 22:00
使用LL库编程时,发现外设中断即使使能也进不了中断。
: y: K/ z/ t9 K' g- n& O& G, m, C5 Z一般外设都会有自己的寄存器来控制中断的开关,比如ADC 中断使能寄存器 (ADC_IER),但是,将里面相应的位置位后,中断仍然不能相应。
( N' P5 l0 N6 S这是因为总的NVIC开关没有打开。这点也好理解。有过STM32开发经验的人都知道,NVIC有开关来控制外设的中断使能。但是在LL库如何实现呢?
8 [3 o+ N3 {5 e翻遍了LL库并没有相应的函数。因为NVIC属于CORTEX内核的东西,外设函数是触摸不到的。(而HAL库是有类似的函数的)
  l) d" w3 K* p7 {+ E5 a, C% x5 J2 B( j# Q. E2 ?6 k+ ?6 y, W
以下是NVIC寄存器: {7 R+ j$ b6 C% W2 H

, E) m; f- l& i4 F6 F
20180920135656668.png

5 I4 g) T) T$ x! n+ |( D$ b: d1 [
3 |" ~& U( W& X下图是对NVIC操作的函数) i% l" ?0 ?8 j8 O1 Q/ Z5 T) `7 D
20180920135627860.png
) C0 \" [' r/ \3 t" I

3 v2 l( z: [4 O" A( c( x. W, h下面是各个中断的序号
7 ~4 P) u4 }" r, J8 o' P8 f# l* m7 Z1 u; @
  1. /** @addtogroup Peripheral_interrupt_number_definition" w' `, `, ]1 M. u: ]0 H3 x3 I8 l
  2.   * @{: Y2 Q# H" V+ l, z4 O8 Q8 Y
  3.   */$ r# Z4 X6 \+ G/ W9 s

  4.   D4 m/ _- x2 z9 a- o
  5. /**
    ( T/ Z6 r8 D3 X' ]. i" I$ G
  6. * @brief stm32l011xx Interrupt Number Definition, according to the selected device
    + f/ g, {- g1 T. V* u8 T2 R
  7. *        in @ref Library_configuration_section
    9 V7 z& m' q; B1 d9 k3 a9 z) }
  8. */  {0 b- R& @$ ]: x* a$ J

  9. 2 A) [) p* Y% _: b3 S( z: {" Z+ O1 }. x
  10. /*!< Interrupt Number Definition */
    . f, W. `+ c" k' e0 }( M9 A# d$ j
  11. typedef enum  w. V# P& Z& O& E, B
  12. {
    ' C% L; ~3 q1 z+ c# D
  13. /******  Cortex-M0 Processor Exceptions Numbers ******************************************************/5 C8 u2 d- i$ g. |
  14.   NonMaskableInt_IRQn         = -14,    /*!< 2 Non Maskable Interrupt                                */
    6 N) x; S! m9 l- X$ k  e. ^# g  y
  15.   HardFault_IRQn              = -13,    /*!< 3 Cortex-M0+ Hard Fault Interrupt                       */
    5 t# g( Z# `4 ?' I
  16.   SVC_IRQn                    = -5,     /*!< 11 Cortex-M0+ SV Call Interrupt                         */
    + M+ n8 [$ t( J8 R7 _
  17.   PendSV_IRQn                 = -2,     /*!< 14 Cortex-M0+ Pend SV Interrupt                         */
    $ n. C) L! u) _4 h+ m! P
  18.   SysTick_IRQn                = -1,     /*!< 15 Cortex-M0+ System Tick Interrupt                     */
    ; J$ ?8 L/ S2 U0 X) a9 |. U# d9 v
  19. ; T+ @! ?8 {+ h$ J$ g. ^
  20. /******  STM32L-0 specific Interrupt Numbers *********************************************************/
    9 M' l+ h5 x% G
  21.   WWDG_IRQn                   = 0,      /*!< Window WatchDog Interrupt                               */: `: J8 N' f# O' P8 K  D
  22.   PVD_IRQn                    = 1,      /*!< PVD through EXTI Line detect Interrupt                  */
    # z  n$ H  B" U
  23.   RTC_IRQn                    = 2,      /*!< RTC through EXTI Line Interrupt                         */2 G% P  ~( e1 o" Q
  24.   FLASH_IRQn                  = 3,      /*!< FLASH Interrupt                                         */
    * N. k  C0 K  r' \2 o
  25.   RCC_IRQn                    = 4,      /*!< RCC Interrupt                                           */
    ! Z" ]! D- D) t0 X1 J
  26.   EXTI0_1_IRQn                = 5,      /*!< EXTI Line 0 and 1 Interrupts                            */
    ' T0 N' y9 M) D' [6 v$ U
  27.   EXTI2_3_IRQn                = 6,      /*!< EXTI Line 2 and 3 Interrupts                            */
    ( Z0 ?. J# h8 g* K* i
  28.   EXTI4_15_IRQn               = 7,      /*!< EXTI Line 4 to 15 Interrupts                            */
    6 g! A" s2 Q; y! C( A* o0 V
  29.   DMA1_Channel1_IRQn          = 9,      /*!< DMA1 Channel 1 Interrupt                                */% r' R  N$ M- J* O
  30.   DMA1_Channel2_3_IRQn        = 10,     /*!< DMA1 Channel 2 and Channel 3 Interrupts                 */1 |  ?; _  A# j
  31.   DMA1_Channel4_5_6_7_IRQn    = 11,     /*!< DMA1 Channel 4, Channel 5, Channel 6 and Channel 7 Interrupts */! o/ J! R* K. i7 r# o; l0 T$ I
  32.   ADC1_COMP_IRQn              = 12,     /*!< ADC1, COMP1 and COMP2 Interrupts                        */
      x) m# P" `, V7 ^7 |8 p7 e; O2 P
  33.   LPTIM1_IRQn                 = 13,     /*!< LPTIM1 Interrupt                                        */
    ' I- h7 v3 B0 ?" U. @$ p
  34.   TIM2_IRQn                   = 15,     /*!< TIM2 Interrupt                                          */7 x: @" j  e/ I2 I" L
  35.   TIM21_IRQn                  = 20,     /*!< TIM21 Interrupt                                         */
    , A4 b; c) c& L3 W4 a
  36.   I2C1_IRQn                   = 23,     /*!< I2C1 Interrupt                                          */" H7 ]4 Y' X$ d  u) _9 a5 O- W$ \
  37.   SPI1_IRQn                   = 25,     /*!< SPI1 Interrupt                                          */
    3 k+ P5 F; e1 v, L  x/ E
  38.   USART2_IRQn                 = 28,     /*!< USART2 Interrupt                                        */
    " L, _7 ]4 {$ ]/ k/ f# g: H+ p, A
  39.   LPUART1_IRQn                = 29,     /*!< LPUART1 Interrupt                                       */
    # a+ `+ v( s7 d" Y4 j4 v. Y
  40. } IRQn_Type;
复制代码

, S; o; h+ P8 W2 o  t1 _5 n例如将ADC1中断使能,除了对ADC1内部的相应中断位(ADC_IER)使能外,还需要使用下列语句才可以:4 H5 b, m0 z  F9 C) s+ c- ?
. Z0 Y6 t( l  }+ _
NVIC_EnableIRQ(ADC1_COMP_IRQn);
( m& Q# O8 B5 |6 b: }4 A( e
- g& x  q1 C* b" d) T* G
0 w! ?. H' p+ I- S; I; R  E' m5 C
, C' _1 G- p: U
收藏 评论0 发布时间:2021-11-19 22:00

举报

0个回答

所属标签

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