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

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

[复制链接]
STMCU小助手 发布时间:2021-11-19 22:00
使用LL库编程时,发现外设中断即使使能也进不了中断。7 X" x( r6 o1 v0 x+ q& b
一般外设都会有自己的寄存器来控制中断的开关,比如ADC 中断使能寄存器 (ADC_IER),但是,将里面相应的位置位后,中断仍然不能相应。" n; i8 ?6 ~+ ~) f( }
这是因为总的NVIC开关没有打开。这点也好理解。有过STM32开发经验的人都知道,NVIC有开关来控制外设的中断使能。但是在LL库如何实现呢?9 y  S- S. p! U$ n' c
翻遍了LL库并没有相应的函数。因为NVIC属于CORTEX内核的东西,外设函数是触摸不到的。(而HAL库是有类似的函数的)
8 r9 K# e, a0 P/ L! u( x  c
  `+ C6 @4 `  l' [3 g! G* Q以下是NVIC寄存器# _; L$ X5 @- U) I& H3 K
# C  e3 W" c+ i2 p8 Y1 f" e
20180920135656668.png
0 I; o1 ]5 Q0 s$ _, B( o& k' f. Q5 g. t
: c7 _+ o1 \  h! ~" p6 x- a
下图是对NVIC操作的函数, D( _3 k) d% ^; r+ y
20180920135627860.png
. t0 Z: |1 [) t+ c/ a! v

" n8 h" X4 i9 z8 e下面是各个中断的序号3 [( K8 L5 _0 R. a4 J0 z' K

8 F( k# e5 y' w4 A* V$ u4 k
  1. /** @addtogroup Peripheral_interrupt_number_definition
    ' b; q8 |8 m( C9 ~6 P: o& C$ v
  2.   * @{) w2 n5 w& \" i: j/ ?; J
  3.   */; C( l8 u3 b! g/ d- R; Z

  4. ; W8 B0 R1 y+ f5 Z* p
  5. /**' ~6 @- x& Y3 s4 |# ^
  6. * @brief stm32l011xx Interrupt Number Definition, according to the selected device
    4 m" O; D6 M) b0 t3 P
  7. *        in @ref Library_configuration_section
    % L, o/ T' X( E3 R: X" \9 |
  8. */
    & I/ |2 @% n% J9 {8 Q5 }& E

  9. 0 f  a' n, y! Z1 F$ D4 l; Y3 P
  10. /*!< Interrupt Number Definition */# d0 Z+ a4 J6 }% P7 A, w
  11. typedef enum' S( M( V4 l% z6 |6 ]1 \
  12. {
    7 ]' z2 s  R/ ~5 o- t" f
  13. /******  Cortex-M0 Processor Exceptions Numbers ******************************************************/. i) ?/ P0 M& C) P/ G) d
  14.   NonMaskableInt_IRQn         = -14,    /*!< 2 Non Maskable Interrupt                                */1 ~4 F6 b$ O" q' m- A0 b
  15.   HardFault_IRQn              = -13,    /*!< 3 Cortex-M0+ Hard Fault Interrupt                       */
    7 L  J  v# y# }5 l' G* o
  16.   SVC_IRQn                    = -5,     /*!< 11 Cortex-M0+ SV Call Interrupt                         */
    % p% E: m* C* ]) r6 T
  17.   PendSV_IRQn                 = -2,     /*!< 14 Cortex-M0+ Pend SV Interrupt                         */
    , K' ?/ r; Z6 z  L( ~0 l
  18.   SysTick_IRQn                = -1,     /*!< 15 Cortex-M0+ System Tick Interrupt                     */1 h) V. i- W6 W5 s
  19. " C7 L! C$ B1 Z. J
  20. /******  STM32L-0 specific Interrupt Numbers *********************************************************/
    ; X0 b2 Z3 k9 O0 G% e+ H& k% q
  21.   WWDG_IRQn                   = 0,      /*!< Window WatchDog Interrupt                               */
    6 ~; K) |2 _3 V$ c# `5 Z$ v
  22.   PVD_IRQn                    = 1,      /*!< PVD through EXTI Line detect Interrupt                  */
    6 E* ^9 g. F" w& `! E
  23.   RTC_IRQn                    = 2,      /*!< RTC through EXTI Line Interrupt                         */
    - I; I" s3 S  y9 F% K
  24.   FLASH_IRQn                  = 3,      /*!< FLASH Interrupt                                         */5 y9 a/ q  v6 n. @- y. a9 r5 S
  25.   RCC_IRQn                    = 4,      /*!< RCC Interrupt                                           */
    # ?' p, o# e1 n3 ]
  26.   EXTI0_1_IRQn                = 5,      /*!< EXTI Line 0 and 1 Interrupts                            */) `0 |# k  {1 d, V1 [8 q
  27.   EXTI2_3_IRQn                = 6,      /*!< EXTI Line 2 and 3 Interrupts                            */
    % `. q7 E" Z' C) F% J5 a
  28.   EXTI4_15_IRQn               = 7,      /*!< EXTI Line 4 to 15 Interrupts                            */& Z/ E# p% d/ p  _
  29.   DMA1_Channel1_IRQn          = 9,      /*!< DMA1 Channel 1 Interrupt                                *// t: P* B5 z5 ?/ o4 ~  P' O) T
  30.   DMA1_Channel2_3_IRQn        = 10,     /*!< DMA1 Channel 2 and Channel 3 Interrupts                 */: _8 U+ E4 }! w/ k1 c0 c" v
  31.   DMA1_Channel4_5_6_7_IRQn    = 11,     /*!< DMA1 Channel 4, Channel 5, Channel 6 and Channel 7 Interrupts */
    1 f1 a, a6 V/ M2 O* i
  32.   ADC1_COMP_IRQn              = 12,     /*!< ADC1, COMP1 and COMP2 Interrupts                        */3 a. z; f  B$ P- R0 |0 Q; @/ A
  33.   LPTIM1_IRQn                 = 13,     /*!< LPTIM1 Interrupt                                        */
    8 S- {* V$ e' a
  34.   TIM2_IRQn                   = 15,     /*!< TIM2 Interrupt                                          */0 k9 g+ T3 Y& p. d+ B
  35.   TIM21_IRQn                  = 20,     /*!< TIM21 Interrupt                                         */2 V: M( p: G0 \( E9 P+ i
  36.   I2C1_IRQn                   = 23,     /*!< I2C1 Interrupt                                          */) T/ J$ C; X2 ]; C
  37.   SPI1_IRQn                   = 25,     /*!< SPI1 Interrupt                                          */1 s* v  \* V  w* p3 a" i
  38.   USART2_IRQn                 = 28,     /*!< USART2 Interrupt                                        */" p$ d. `5 \& |  J( w
  39.   LPUART1_IRQn                = 29,     /*!< LPUART1 Interrupt                                       */
    . m1 w& q& L( y8 D6 Y# b* o% V- W
  40. } IRQn_Type;
复制代码
% v- |- T, J% r; i( w9 d
例如将ADC1中断使能,除了对ADC1内部的相应中断位(ADC_IER)使能外,还需要使用下列语句才可以:
  M7 `2 d' q: Q
& R- ~9 ]6 U1 C# C8 x' m, }: @# GNVIC_EnableIRQ(ADC1_COMP_IRQn);' N8 b, Q/ v9 }8 `# ?
* V' ^7 n  u% |5 s9 W

0 T4 |0 I( F: N  X! \! b; \- C" K  n$ c  Q6 c, c2 j
收藏 评论0 发布时间:2021-11-19 22:00

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版