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

Systick的中断是在哪里使能的?

[复制链接]
macompengluo 提问时间:2019-10-9 17:50 /
       用Cube生成了一个工程文件,在“stm32f4xx_it.c”中就会有Systick的中断处理函数SysTick_Handler(),并且程序能够进入到这里。
       上电TICKINT位应该默认为0,也就是禁止Systick中断的。那么意味着程序里一定有地方使能了Systick中断。
       可是我只找到HAL_InitTick()这个函数,里面也没有去使能Systick中断,那么到底在哪里使能的呢?
收藏 评论9 发布时间:2019-10-9 17:50

举报

9个回答
哀歌与世无争 回答时间:2019-10-10 09:58:16
HAL_InitTick()里面的HAL_SYSTICK_Config(),HAL_SYSTICK_Config函数里调用的SysTick_Config(TicksNumb);
/* Configure the SysTick to have interrupt in 1ms time basis*/
  if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U)
  {
    return HAL_ERROR;
  }


/**
  * @brief  Initializes the System Timer and its interrupt, and starts the System Tick Timer.
  *         Counter is in free running mode to generate periodic interrupts.
  * @param  TicksNumb: Specifies the ticks Number of ticks between two interrupts.
  * @retval status:  - 0  Function succeeded.
  *                  - 1  Function failed.
  */
uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb)
{
   return SysTick_Config(TicksNumb);
}
Paderboy 回答时间:2019-10-10 09:33:52
void HAL_ResumeTick(void)
{
  /* Enable SysTick Interrupt */
  SET_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);
}

macompengluo 回答时间:2019-10-16 10:13:30
哀歌与世无争 发表于 2019-10-10 09:58
HAL_InitTick()里面的HAL_SYSTICK_Config(),HAL_SYSTICK_Config函数里调用的SysTick_Config(TicksNumb);
  ...

SysTick_Config()只设置了SysTick的中断优先级,没有去使能SysTick中断
macompengluo 回答时间:2019-10-16 10:13:58
Paderboy 发表于 2019-10-10 09:33
void HAL_ResumeTick(void)
{
  /* Enable SysTick Interrupt */

没有看到调用HAL_ResumeTick()的地方啊!
哀歌与世无争 回答时间:2019-10-16 15:42:40
macompengluo 发表于 2019-10-16 10:13
SysTick_Config()只设置了SysTick的中断优先级,没有去使能SysTick中断

有的,看注释也知道,怎么说没有呢,难道你说的是NVIC没设置?systick属于内核中断,不可屏蔽,一直都是使能的,你可以点CubeMX里的NVIC设置,就会发现systick的Enabled是取消不了的,也就是默认中断使能的。所以只要开systick控制寄存器里的中断使能位就行了。
SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
                   SysTick_CTRL_TICKINT_Msk   |
                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */
Timer */

完整的SysTick_Config:
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
  {
    return (1UL);                                                   /* Reload value impossible */
  }

  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */
  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
                   SysTick_CTRL_TICKINT_Msk   |
                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */
  return (0UL);                                                     /* Function successful */
}
macompengluo 回答时间:2019-10-21 19:02:41
哀歌与世无争 发表于 2019-10-16 15:42
有的,看注释也知道,怎么说没有呢,难道你说的是NVIC没设置?systick属于内核中断,不可屏蔽,一直都是 ...

明白了,谢谢!
macompengluo 回答时间:2019-10-21 19:03:18
哀歌与世无争 发表于 2019-10-16 15:42
有的,看注释也知道,怎么说没有呢,难道你说的是NVIC没设置?systick属于内核中断,不可屏蔽,一直都是 ...

明白了,谢谢!
butterflyspring 回答时间:2019-10-31 16:58:31
CUBE库中在一开始的 HAL_Init()中。找到后继续往下看,里面有详细的源码
systick.PNG
caoenq 回答时间:2019-11-1 08:51:48
SYSTICK中断也是可以屏蔽的。

所属标签

相似问题

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