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

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

[复制链接]
STMCU小助手 发布时间:2021-11-19 22:00
使用LL库编程时,发现外设中断即使使能也进不了中断。
; `+ u0 @" j; R一般外设都会有自己的寄存器来控制中断的开关,比如ADC 中断使能寄存器 (ADC_IER),但是,将里面相应的位置位后,中断仍然不能相应。; F8 X; K4 [# {2 b
这是因为总的NVIC开关没有打开。这点也好理解。有过STM32开发经验的人都知道,NVIC有开关来控制外设的中断使能。但是在LL库如何实现呢?; k, w8 q& H  Z! Q3 y
翻遍了LL库并没有相应的函数。因为NVIC属于CORTEX内核的东西,外设函数是触摸不到的。(而HAL库是有类似的函数的)! X0 L( w6 X! L  L$ l. `
8 e& }' C! t. v7 F
以下是NVIC寄存器1 T& A" I' e% N, T) `- j

$ I& e  \; ?' x
20180920135656668.png
9 n( K; S+ L! d* k
7 T* o6 t- H8 E- w
下图是对NVIC操作的函数9 K! i4 O* U6 ?! P; k" x
20180920135627860.png
: H6 X8 B. A5 e0 J# h3 y) H

2 J2 O6 \1 b9 ^5 u下面是各个中断的序号
2 |0 \: C3 L7 v, \& z+ m, y& ^. m) S; R. G% Q) _! o8 X* Q4 P7 W5 [
  1. /** @addtogroup Peripheral_interrupt_number_definition
    + \) Q2 H+ q) B6 D
  2.   * @{+ M3 z; g% O8 ?" n" v7 g4 ]
  3.   */4 P' q5 N2 X6 B. l4 {5 h+ D

  4. 6 Z( k! U5 g- U; Z' U$ V$ `" r+ K
  5. /**
    # f% k# L2 v3 h
  6. * @brief stm32l011xx Interrupt Number Definition, according to the selected device
    & [/ @4 L/ \& c, K) j( s* x
  7. *        in @ref Library_configuration_section
    0 X7 C6 m) Q  L6 l
  8. */
    - F4 p3 \$ Q$ B8 v
  9. 8 I* \& c7 X7 l4 F7 D% k  r% u" P
  10. /*!< Interrupt Number Definition */
    $ u& }; q0 H- }- [$ e6 G- u" E
  11. typedef enum3 U0 E( v6 S# w  ?# Y% N
  12. {
    , z3 C. F, f% u" ]: h1 t* b3 w. ?
  13. /******  Cortex-M0 Processor Exceptions Numbers ******************************************************/3 M5 Q6 e( @  I
  14.   NonMaskableInt_IRQn         = -14,    /*!< 2 Non Maskable Interrupt                                */0 t  o8 R3 }! S7 P7 H- G, S
  15.   HardFault_IRQn              = -13,    /*!< 3 Cortex-M0+ Hard Fault Interrupt                       */
    ( o( {* g; t- w
  16.   SVC_IRQn                    = -5,     /*!< 11 Cortex-M0+ SV Call Interrupt                         */0 u2 H3 J3 f% p. k3 L) p8 n3 _
  17.   PendSV_IRQn                 = -2,     /*!< 14 Cortex-M0+ Pend SV Interrupt                         */# p# ?' F  D5 `
  18.   SysTick_IRQn                = -1,     /*!< 15 Cortex-M0+ System Tick Interrupt                     */' C$ h5 q* }& Q( W2 m) M
  19. " ~7 H) u% ]" ^* ~( R% s
  20. /******  STM32L-0 specific Interrupt Numbers *********************************************************/
    / r+ t) [2 J6 r9 s0 y2 \: T6 u) {
  21.   WWDG_IRQn                   = 0,      /*!< Window WatchDog Interrupt                               */3 u, a# v( g$ `4 ~8 Z
  22.   PVD_IRQn                    = 1,      /*!< PVD through EXTI Line detect Interrupt                  */( m6 t! q& V9 C0 t* s, c- B
  23.   RTC_IRQn                    = 2,      /*!< RTC through EXTI Line Interrupt                         */. ?2 |0 ?; _+ {" G5 \
  24.   FLASH_IRQn                  = 3,      /*!< FLASH Interrupt                                         *// q: q/ f. E! \  t
  25.   RCC_IRQn                    = 4,      /*!< RCC Interrupt                                           */
    ! ^5 c8 J& t+ b7 z3 |
  26.   EXTI0_1_IRQn                = 5,      /*!< EXTI Line 0 and 1 Interrupts                            */
    2 `5 K( m- f( w7 s5 Y4 S+ O& ^
  27.   EXTI2_3_IRQn                = 6,      /*!< EXTI Line 2 and 3 Interrupts                            */
    " ]7 ^& ^. Z5 i0 J5 N2 I- ~8 T7 N! H
  28.   EXTI4_15_IRQn               = 7,      /*!< EXTI Line 4 to 15 Interrupts                            */
    . M, H+ L" y# @- t
  29.   DMA1_Channel1_IRQn          = 9,      /*!< DMA1 Channel 1 Interrupt                                */% C$ M/ ^6 U, l6 t
  30.   DMA1_Channel2_3_IRQn        = 10,     /*!< DMA1 Channel 2 and Channel 3 Interrupts                 */
    ) F2 ?' A8 s  F" R" M7 p
  31.   DMA1_Channel4_5_6_7_IRQn    = 11,     /*!< DMA1 Channel 4, Channel 5, Channel 6 and Channel 7 Interrupts */
    ( V9 G3 C4 Z$ P$ \! @# y
  32.   ADC1_COMP_IRQn              = 12,     /*!< ADC1, COMP1 and COMP2 Interrupts                        */$ d) W6 O  h$ X) T8 S( c7 u
  33.   LPTIM1_IRQn                 = 13,     /*!< LPTIM1 Interrupt                                        */6 F  z5 T$ R- c* G) M( F
  34.   TIM2_IRQn                   = 15,     /*!< TIM2 Interrupt                                          */8 {: d* ~  O# s- l1 P+ M3 s; H3 L
  35.   TIM21_IRQn                  = 20,     /*!< TIM21 Interrupt                                         */
    " s% Y; X4 R7 M4 D- {- R
  36.   I2C1_IRQn                   = 23,     /*!< I2C1 Interrupt                                          */
    % ^+ j( @7 y9 \
  37.   SPI1_IRQn                   = 25,     /*!< SPI1 Interrupt                                          */
    8 Y3 A$ W- `7 y7 F' s; `5 A/ f0 b( d0 ]
  38.   USART2_IRQn                 = 28,     /*!< USART2 Interrupt                                        */, Q, W) s3 K# E" h$ f* L
  39.   LPUART1_IRQn                = 29,     /*!< LPUART1 Interrupt                                       */' l; R+ @+ V, Q, z
  40. } IRQn_Type;
复制代码
7 K0 S0 c3 x. |3 }( a3 v. @
例如将ADC1中断使能,除了对ADC1内部的相应中断位(ADC_IER)使能外,还需要使用下列语句才可以:
6 L' z2 F8 g$ q3 \4 g* E/ P( q& D. D* c2 R  N* x, C3 o! D
NVIC_EnableIRQ(ADC1_COMP_IRQn);% o2 d$ E; l& {/ h9 ~' h9 s- y. C/ r: r
# j: ?7 ]0 Z. l1 v/ S3 a

5 J0 F4 C# Y% _, d1 P) a7 p- t0 O: i( n
收藏 评论0 发布时间:2021-11-19 22:00

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版