请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
STMCU小助手 发布时间:2021-11-19 22:00
使用LL库编程时,发现外设中断即使使能也进不了中断。
1 Y" i' g, a% l& r一般外设都会有自己的寄存器来控制中断的开关,比如ADC 中断使能寄存器 (ADC_IER),但是,将里面相应的位置位后,中断仍然不能相应。
: y4 M( ~5 E, M# i这是因为总的NVIC开关没有打开。这点也好理解。有过STM32开发经验的人都知道,NVIC有开关来控制外设的中断使能。但是在LL库如何实现呢?2 B" P! F7 K4 B4 ?
翻遍了LL库并没有相应的函数。因为NVIC属于CORTEX内核的东西,外设函数是触摸不到的。(而HAL库是有类似的函数的)0 H9 L1 \  s+ G1 ~0 ^  ~, Y
3 @, H" g/ k: A& _: z. g- _
以下是NVIC寄存器
4 f* `2 j7 X" o) C9 ^' x. q. `& v% @
20180920135656668.png

/ C3 F; v, ?- V& S, Q3 K! z9 S) Z
下图是对NVIC操作的函数
6 f" ~9 F: @5 I% p( ~% }' ?- c
20180920135627860.png

. D' j+ `4 ^" B# w( m6 @8 ?! L8 [
: A& ~4 h) \' Y6 [# e8 D. P* w, S6 {下面是各个中断的序号
8 t6 Z. g: v2 n$ g( k) G+ H5 C5 q4 z) Y3 m0 e9 j
  1. /** @addtogroup Peripheral_interrupt_number_definition
    * I' i' z7 z4 q5 s5 o5 {5 f# Z
  2.   * @{. Z/ W# ]; B6 R& y# [
  3.   */
    ! R( p/ O! F5 G# N5 {+ H
  4. 1 d6 v6 T1 @( n. ]  U# T( r
  5. /**3 Q- }" s" e) m# [6 b
  6. * @brief stm32l011xx Interrupt Number Definition, according to the selected device + ~0 S$ r/ s3 f, a" c
  7. *        in @ref Library_configuration_section
    6 H# S9 S0 U0 p3 C9 m9 t
  8. */% ]3 g0 f/ c2 f2 f2 G
  9. 3 b* c8 O/ e# m0 g; z9 ]
  10. /*!< Interrupt Number Definition */
    0 A$ m- K+ W1 o( ?3 e. c
  11. typedef enum
    3 X' P' O, K" t5 G
  12. {, i, a! ]; k3 u0 p) F
  13. /******  Cortex-M0 Processor Exceptions Numbers ******************************************************/+ D# J; Z" V8 b, v* m
  14.   NonMaskableInt_IRQn         = -14,    /*!< 2 Non Maskable Interrupt                                */
    4 {3 v2 E1 a1 c7 _" ^
  15.   HardFault_IRQn              = -13,    /*!< 3 Cortex-M0+ Hard Fault Interrupt                       */
    / U% `; K0 A) ?7 G8 l+ K
  16.   SVC_IRQn                    = -5,     /*!< 11 Cortex-M0+ SV Call Interrupt                         */
    4 }: L( k( S; J* t. k
  17.   PendSV_IRQn                 = -2,     /*!< 14 Cortex-M0+ Pend SV Interrupt                         */% @3 F( o/ C/ H2 ]+ e, k5 M
  18.   SysTick_IRQn                = -1,     /*!< 15 Cortex-M0+ System Tick Interrupt                     */5 B) }) j: I# G

  19. & G5 P5 e: I* ]/ i- U- Q
  20. /******  STM32L-0 specific Interrupt Numbers *********************************************************/: S" D: r6 o( N# S6 y& ?5 k: O: C, n
  21.   WWDG_IRQn                   = 0,      /*!< Window WatchDog Interrupt                               */+ A4 J' A- M6 ?
  22.   PVD_IRQn                    = 1,      /*!< PVD through EXTI Line detect Interrupt                  */. b9 w! {2 u4 l6 i1 p7 {
  23.   RTC_IRQn                    = 2,      /*!< RTC through EXTI Line Interrupt                         */
    0 r2 [1 V% |. S# N
  24.   FLASH_IRQn                  = 3,      /*!< FLASH Interrupt                                         */
    ! s8 l6 j! U& ^& T( \& i9 d
  25.   RCC_IRQn                    = 4,      /*!< RCC Interrupt                                           */8 g7 T5 }. {4 Y+ P5 U
  26.   EXTI0_1_IRQn                = 5,      /*!< EXTI Line 0 and 1 Interrupts                            */1 W7 o  L4 t  P* X2 A
  27.   EXTI2_3_IRQn                = 6,      /*!< EXTI Line 2 and 3 Interrupts                            */
    " `2 ^1 U/ \7 \! j/ x3 |0 W
  28.   EXTI4_15_IRQn               = 7,      /*!< EXTI Line 4 to 15 Interrupts                            */
    7 D7 n7 X* [; w! a
  29.   DMA1_Channel1_IRQn          = 9,      /*!< DMA1 Channel 1 Interrupt                                */9 W, R1 ]' D9 k
  30.   DMA1_Channel2_3_IRQn        = 10,     /*!< DMA1 Channel 2 and Channel 3 Interrupts                 */
    * v/ T: Y! k. j; J8 j, ~) ]/ _
  31.   DMA1_Channel4_5_6_7_IRQn    = 11,     /*!< DMA1 Channel 4, Channel 5, Channel 6 and Channel 7 Interrupts */  w# q( @0 f* y' F; Q2 N3 e- Z7 u
  32.   ADC1_COMP_IRQn              = 12,     /*!< ADC1, COMP1 and COMP2 Interrupts                        */
    ! T9 Q1 L# @# x, M' b
  33.   LPTIM1_IRQn                 = 13,     /*!< LPTIM1 Interrupt                                        */( q9 Q; J; I& y- E$ o) y( p$ t
  34.   TIM2_IRQn                   = 15,     /*!< TIM2 Interrupt                                          */* z# h2 y$ J6 B- b
  35.   TIM21_IRQn                  = 20,     /*!< TIM21 Interrupt                                         */
    * |3 C: j7 L) f% D7 Q) m4 `
  36.   I2C1_IRQn                   = 23,     /*!< I2C1 Interrupt                                          */
    - q) g; a, E) g6 a3 X/ {1 B) e
  37.   SPI1_IRQn                   = 25,     /*!< SPI1 Interrupt                                          */
    8 w; T6 X/ [( J% w# q8 N; \/ w7 A$ o
  38.   USART2_IRQn                 = 28,     /*!< USART2 Interrupt                                        */
    # @* C" ~: @" @! s. @
  39.   LPUART1_IRQn                = 29,     /*!< LPUART1 Interrupt                                       */
    ) L3 ]& [, S0 f
  40. } IRQn_Type;
复制代码
% c$ v9 {3 O( y  t5 \
例如将ADC1中断使能,除了对ADC1内部的相应中断位(ADC_IER)使能外,还需要使用下列语句才可以:
( ^2 O4 e  m& v9 R% N+ @
6 W2 X* A* }" K: ?3 o- S; F7 VNVIC_EnableIRQ(ADC1_COMP_IRQn);9 P, P- B4 q1 L& z% @
& Q4 X: c, l/ z  B/ C9 a& G

# @, }3 W" j9 f6 }
* \0 _5 \9 {6 r7 W" t
收藏 评论0 发布时间:2021-11-19 22:00

举报

0个回答

所属标签

相似分享

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