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

【经验分享】STM32L0 SysTick无法进入中断怎么处理

[复制链接]
STMCU小助手 发布时间:2021-11-16 01:28
STM32L0 SysTick无法进入中断怎么处理(LL库)
) i* B6 D; L, T" T2 m% ^使用LL库,对systick进行配置
8 L0 C# n* c- R$ z: X* `LL_SYSTICK_SetClkSource(LL_SYSTICK_CLKSOURCE_HCLK);9 g2 l% U+ G6 F. Q8 U( N
LL_SYSTICK_EnableIT();
% }$ W% y5 }1 V4 C9 t2 X! X' v5 q9 x2 e
如此设置,选择了时钟源,打开了中断。讲道理应该可以进中断。但是,事实上却不是这样。systick就是进不了中断。
8 G2 i  y2 Y0 d检查一下标志位:( e) M) j8 n# N- D: q& B4 \
20180919140949683.png

6 S' p. _5 w5 x& a& x
& e- _9 R" t9 ]. a! X; d原因是systick没有使能。; e3 H$ H) \1 l
使用如下函数可以初始化systick。
$ U2 P% `1 t- T! u
- @* i. ?- E% h/ E" Y  x  `
  1. __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)+ R. p7 ~$ n8 m5 c9 T% d& F
  2. {
    $ N- m; v' N7 a* g4 v( @6 j
  3.   if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
    + j8 d, A2 @6 i7 j1 |1 w: c+ ~
  4.   {. S4 T/ T* u8 O6 h
  5.     return (1UL);                                                   /* Reload value impossible */; p* }* S3 F8 S" k+ K2 P
  6.   }
    ! M2 q" ^9 Y+ T8 g6 T7 u

  7. / U* N7 k5 ~7 ]9 F; _
  8.   SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */
    0 Y. n3 d+ \: r/ a. I' O
  9.   NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
    / V7 Z- Y' g0 Z( X  p+ U) G4 j
  10.   SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */* ~3 P2 p! X, x% r6 {
  11.   SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
    : J' b3 y2 R+ a5 }0 _# v
  12.                    SysTick_CTRL_TICKINT_Msk   |1 }/ I4 X+ Q4 H# _4 }( l; i0 P9 m
  13.                    SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */
      t, f6 u1 `2 @8 j7 P
  14.   return (0UL);                                                     /* Function successful */
    8 Q: B. ^+ T7 h1 O
  15. }
复制代码

! z6 i# E4 \% E$ @' S
7 {7 c  b' G1 k9 R$ D! i9 U这是一个带返回值的函数。传递参数ticks是对reload进行赋值。如果参数合法,则对systick进行初始化。包括reload寄存器设置、优先级设置、Counter Value寄存器设置,还有就是时钟源选择、中断允许、systick使能等操作。返回值表示成功与否。想成功使用systick,直接调用函数SysTick_Config()就可以了。! w" F! M5 y7 Z) |  _7 N8 I

/ N9 {3 J" p* c
2 E$ l2 e7 T  ~5 y  ~
" a7 ^/ N8 Y6 i* ?
收藏 评论0 发布时间:2021-11-16 01:28

举报

0个回答

所属标签

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