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

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

[复制链接]
STMCU小助手 发布时间:2021-11-19 22:00
使用LL库编程时,发现外设中断即使使能也进不了中断。4 q& H* Q+ H3 Z% \# [8 q3 \
一般外设都会有自己的寄存器来控制中断的开关,比如ADC 中断使能寄存器 (ADC_IER),但是,将里面相应的位置位后,中断仍然不能相应。
9 H) K  l" i# p$ F& }这是因为总的NVIC开关没有打开。这点也好理解。有过STM32开发经验的人都知道,NVIC有开关来控制外设的中断使能。但是在LL库如何实现呢?
5 C( f, j5 ~* z7 u! K6 O翻遍了LL库并没有相应的函数。因为NVIC属于CORTEX内核的东西,外设函数是触摸不到的。(而HAL库是有类似的函数的)0 ^9 c7 Z, K  u& x
! Y- g$ c$ N7 \/ }
以下是NVIC寄存器1 S. G$ F4 F) f
0 _) J/ c9 V* C# k% ^2 I
20180920135656668.png
6 v) s, [* L2 y+ J+ T
9 c! d/ {  B) L/ p5 j
下图是对NVIC操作的函数
& ?9 B' l2 E! }$ A
20180920135627860.png

$ ~, M& m  E$ G- x' b) k. T4 o1 i
下面是各个中断的序号
: @0 j% [, Z# y% q; p8 _+ q* P0 Y
4 b$ B' a7 x( }& J, \) p' k) N" g* w
  1. /** @addtogroup Peripheral_interrupt_number_definition+ [6 p8 `( L2 ?1 g! ]; E$ S' ~* M2 w
  2.   * @{/ D4 S, b7 b7 p1 t8 I, [( b4 L9 t
  3.   */. x$ \9 A4 H; A& M

  4. + K8 m. }$ S2 G+ [* X
  5. /**. A, L! ?6 Z: ]. O
  6. * @brief stm32l011xx Interrupt Number Definition, according to the selected device
    0 B. s5 B" V* o$ R$ n
  7. *        in @ref Library_configuration_section
    % p3 r2 S$ u* @  w% M& ^
  8. */; U7 L  J9 e2 p

  9. 6 N+ ]' z& ~! M0 q, M4 U8 M  B& {
  10. /*!< Interrupt Number Definition */
    1 E- G- W' S) @- o( v4 ]
  11. typedef enum
    : Y7 ]  w+ c* F; Y; W% T4 ~
  12. {4 |6 O( V% r/ J" I
  13. /******  Cortex-M0 Processor Exceptions Numbers ******************************************************/) @0 Q/ R/ C. @4 G
  14.   NonMaskableInt_IRQn         = -14,    /*!< 2 Non Maskable Interrupt                                */: x; o/ l- m+ P8 x) P, K
  15.   HardFault_IRQn              = -13,    /*!< 3 Cortex-M0+ Hard Fault Interrupt                       */6 D3 e2 l  y/ z7 e
  16.   SVC_IRQn                    = -5,     /*!< 11 Cortex-M0+ SV Call Interrupt                         */  E7 B; {# M+ d6 ^3 h3 w# a' j
  17.   PendSV_IRQn                 = -2,     /*!< 14 Cortex-M0+ Pend SV Interrupt                         */
    1 @- z- d+ M6 y( ?0 S, x8 _7 I
  18.   SysTick_IRQn                = -1,     /*!< 15 Cortex-M0+ System Tick Interrupt                     */
    ; C" n3 n4 Q4 V" D

  19. 3 a/ |; B3 ?6 v6 P, A
  20. /******  STM32L-0 specific Interrupt Numbers *********************************************************/4 g5 V+ G  T( c8 S
  21.   WWDG_IRQn                   = 0,      /*!< Window WatchDog Interrupt                               */
    ; R& s' [8 ]1 ~. e4 _
  22.   PVD_IRQn                    = 1,      /*!< PVD through EXTI Line detect Interrupt                  */3 w3 L) {3 A: }1 [! s
  23.   RTC_IRQn                    = 2,      /*!< RTC through EXTI Line Interrupt                         */3 E! r/ V/ w$ u
  24.   FLASH_IRQn                  = 3,      /*!< FLASH Interrupt                                         */4 w7 C& N( H: I  z% e( P
  25.   RCC_IRQn                    = 4,      /*!< RCC Interrupt                                           */
    " s& ~4 `  z7 a# q! G' w4 |
  26.   EXTI0_1_IRQn                = 5,      /*!< EXTI Line 0 and 1 Interrupts                            */
    & K1 t8 w" @4 I( E; X
  27.   EXTI2_3_IRQn                = 6,      /*!< EXTI Line 2 and 3 Interrupts                            */: z/ z8 ?8 j; T) Y) t$ N+ z
  28.   EXTI4_15_IRQn               = 7,      /*!< EXTI Line 4 to 15 Interrupts                            */
    * j3 P' Q5 d3 t( I
  29.   DMA1_Channel1_IRQn          = 9,      /*!< DMA1 Channel 1 Interrupt                                */  R/ O7 z; G! a9 K1 t
  30.   DMA1_Channel2_3_IRQn        = 10,     /*!< DMA1 Channel 2 and Channel 3 Interrupts                 */
    ( v# ^! s4 n& u$ Q( c7 M+ K' @, X
  31.   DMA1_Channel4_5_6_7_IRQn    = 11,     /*!< DMA1 Channel 4, Channel 5, Channel 6 and Channel 7 Interrupts */
    # J. C& l9 k+ K; ]7 l. G5 C
  32.   ADC1_COMP_IRQn              = 12,     /*!< ADC1, COMP1 and COMP2 Interrupts                        */7 i' a: `/ k: ~' G
  33.   LPTIM1_IRQn                 = 13,     /*!< LPTIM1 Interrupt                                        */
    9 A, D- [/ ~3 f' V# E1 q
  34.   TIM2_IRQn                   = 15,     /*!< TIM2 Interrupt                                          */' u8 M. s8 F% O. ?
  35.   TIM21_IRQn                  = 20,     /*!< TIM21 Interrupt                                         */
    ' j; {4 w7 q  Q1 k, Z8 ]' o
  36.   I2C1_IRQn                   = 23,     /*!< I2C1 Interrupt                                          */
    ( h, ]) }9 C8 e
  37.   SPI1_IRQn                   = 25,     /*!< SPI1 Interrupt                                          */
    ( y: M$ O$ X. ~
  38.   USART2_IRQn                 = 28,     /*!< USART2 Interrupt                                        */5 h" A% {- q# U2 C
  39.   LPUART1_IRQn                = 29,     /*!< LPUART1 Interrupt                                       */
    3 m  j! A) G  s- R: a4 z
  40. } IRQn_Type;
复制代码

* s$ ], N: D6 ]例如将ADC1中断使能,除了对ADC1内部的相应中断位(ADC_IER)使能外,还需要使用下列语句才可以:
  i% ]1 T0 I4 |$ \% B6 t, P0 S' q1 n) V
NVIC_EnableIRQ(ADC1_COMP_IRQn);2 |9 ]6 m8 @  X; A

5 Z- h1 f3 W; M) q  U
8 _6 s- _. v& [4 B' u
1 j9 V4 Z8 k. x% @8 n
收藏 评论0 发布时间:2021-11-19 22:00

举报

0个回答

所属标签

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