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

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

[复制链接]
STMCU小助手 发布时间:2021-11-19 22:00
使用LL库编程时,发现外设中断即使使能也进不了中断。
1 r6 i  G4 J( T" V. j6 V一般外设都会有自己的寄存器来控制中断的开关,比如ADC 中断使能寄存器 (ADC_IER),但是,将里面相应的位置位后,中断仍然不能相应。
( J4 T- L6 Y* P; ~+ p& w这是因为总的NVIC开关没有打开。这点也好理解。有过STM32开发经验的人都知道,NVIC有开关来控制外设的中断使能。但是在LL库如何实现呢?
8 ?& B! E* J  G" Q翻遍了LL库并没有相应的函数。因为NVIC属于CORTEX内核的东西,外设函数是触摸不到的。(而HAL库是有类似的函数的)! Z4 s# z7 _9 f2 w$ A
6 V" _: ?/ R, b
以下是NVIC寄存器  e9 F; g/ s7 _8 v7 r1 L
7 X/ M; ?2 N* L1 l3 C
20180920135656668.png

+ |% ~+ ]( X0 {# @3 `4 \
8 P7 h, N/ H8 o8 @* s1 o3 c下图是对NVIC操作的函数6 i. F  V$ t, }
20180920135627860.png
' w3 L5 C. T7 N3 c/ ]+ y

6 W/ L0 a  i/ p* f4 m下面是各个中断的序号! c/ Q3 H2 F$ A3 Z/ [
0 \6 X4 @9 b/ a( R
  1. /** @addtogroup Peripheral_interrupt_number_definition  p8 b6 a) m' A: _
  2.   * @{- U- q4 I& r& C* Q% Q
  3.   */
    - A/ m+ ~* f+ p& W- x: G

  4. ; m- Y; y! C, {9 x/ P
  5. /**
    ) X& j" M/ z1 V- X
  6. * @brief stm32l011xx Interrupt Number Definition, according to the selected device   y( P4 V# P, u, G* t, z& {8 I
  7. *        in @ref Library_configuration_section
    . L/ z% \$ @6 U1 S* T+ k# h
  8. */' s3 e+ i- ^2 j& {

  9. 1 j0 G! R( h* @6 \1 I! s
  10. /*!< Interrupt Number Definition */
    6 {: e+ W0 @1 \' q
  11. typedef enum. Q, I7 Z* i/ ?  j: P1 o7 B' h% \
  12. {4 Q: Y9 B" P8 M# Y$ Z1 X. d
  13. /******  Cortex-M0 Processor Exceptions Numbers ******************************************************/) Z; b0 x( A1 F" S
  14.   NonMaskableInt_IRQn         = -14,    /*!< 2 Non Maskable Interrupt                                */
    ' T* a$ o+ F* j( ^
  15.   HardFault_IRQn              = -13,    /*!< 3 Cortex-M0+ Hard Fault Interrupt                       */
    , z" |1 M  Z9 X8 _! e; t4 D
  16.   SVC_IRQn                    = -5,     /*!< 11 Cortex-M0+ SV Call Interrupt                         */
    : ]/ \9 U* ~& K
  17.   PendSV_IRQn                 = -2,     /*!< 14 Cortex-M0+ Pend SV Interrupt                         */
    ) _  @% H) C3 T5 D7 f6 I
  18.   SysTick_IRQn                = -1,     /*!< 15 Cortex-M0+ System Tick Interrupt                     */3 f1 h0 D" }4 w$ L
  19. 1 s2 v4 z8 x" f/ ?, q, P: X# s# @
  20. /******  STM32L-0 specific Interrupt Numbers *********************************************************/
    ' @" @# y, b! }
  21.   WWDG_IRQn                   = 0,      /*!< Window WatchDog Interrupt                               */
    5 g7 G4 B! z, Z8 q% P, I
  22.   PVD_IRQn                    = 1,      /*!< PVD through EXTI Line detect Interrupt                  */- c4 H7 m( P& n) b3 F8 z9 i
  23.   RTC_IRQn                    = 2,      /*!< RTC through EXTI Line Interrupt                         */  }3 U( ~; v1 l1 j/ r7 Z2 t& c- {
  24.   FLASH_IRQn                  = 3,      /*!< FLASH Interrupt                                         */9 O  U8 y7 e2 g
  25.   RCC_IRQn                    = 4,      /*!< RCC Interrupt                                           */
    ' Z0 [) P& a' m- P$ {
  26.   EXTI0_1_IRQn                = 5,      /*!< EXTI Line 0 and 1 Interrupts                            */; Z% ~3 B- J! B9 m# S! {
  27.   EXTI2_3_IRQn                = 6,      /*!< EXTI Line 2 and 3 Interrupts                            */% g4 p! g) t; S# A2 e! A: U; m
  28.   EXTI4_15_IRQn               = 7,      /*!< EXTI Line 4 to 15 Interrupts                            */& w. m2 T: P5 X
  29.   DMA1_Channel1_IRQn          = 9,      /*!< DMA1 Channel 1 Interrupt                                */: t  A' r; [8 k2 ~
  30.   DMA1_Channel2_3_IRQn        = 10,     /*!< DMA1 Channel 2 and Channel 3 Interrupts                 */
    - d& X9 M# b, u" Z. ^; {: Y2 R( U3 j
  31.   DMA1_Channel4_5_6_7_IRQn    = 11,     /*!< DMA1 Channel 4, Channel 5, Channel 6 and Channel 7 Interrupts */
    ' T8 e( V, M# f
  32.   ADC1_COMP_IRQn              = 12,     /*!< ADC1, COMP1 and COMP2 Interrupts                        */
    + y  V1 E9 p0 W0 L
  33.   LPTIM1_IRQn                 = 13,     /*!< LPTIM1 Interrupt                                        */2 X: {5 C* y/ q' z9 l: _
  34.   TIM2_IRQn                   = 15,     /*!< TIM2 Interrupt                                          */
    3 Z: u9 B* V+ l/ {2 }3 l; Q
  35.   TIM21_IRQn                  = 20,     /*!< TIM21 Interrupt                                         */
    6 T3 h' B+ R6 b: M2 m
  36.   I2C1_IRQn                   = 23,     /*!< I2C1 Interrupt                                          */
    + W5 d8 r+ |+ _( F. R, _7 a* _
  37.   SPI1_IRQn                   = 25,     /*!< SPI1 Interrupt                                          */
    7 M5 X& }  T3 [2 k3 u5 D
  38.   USART2_IRQn                 = 28,     /*!< USART2 Interrupt                                        */: `. n. Y* _* a' \3 s
  39.   LPUART1_IRQn                = 29,     /*!< LPUART1 Interrupt                                       */
    0 f! n  A( M: j, k7 I8 n' `
  40. } IRQn_Type;
复制代码

9 s8 S8 H$ V9 z/ m! l: S8 g' @! S例如将ADC1中断使能,除了对ADC1内部的相应中断位(ADC_IER)使能外,还需要使用下列语句才可以:
1 Z9 X5 _8 i! w+ K6 ]- D) v( f- E+ |$ z- x4 y; h
NVIC_EnableIRQ(ADC1_COMP_IRQn);
" _( T& D& U& Q8 W; g0 d6 e! I2 s3 m/ o1 h+ |5 _
; G/ y- W1 \6 `8 C/ b

" f2 N9 u3 m/ w0 [
赞 收藏 评论0 发布时间:2021-11-19 22:00

举报

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