• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

为什么stm32 本身就有定时器,还要systick干嘛

7943603 2018-07-31 浏览量:2382
为什么stm32 本身就有定时器,还要systick干嘛
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • systick 是Cortext 集成的系统定时器,是可重载的24位递减计数器。用在操作系统和软件中断比较方便。 当然除了数据手册上讲的systick的功能外,用他的主要目的还是为了方便代码的移植, 因为systick对所有的Cortex设备都兼容 所以你用另外一个Cortex处理器时,systick的代码直接可以移植过去 


    通用定时器可以是16位,32位,单次,可重载由用户根据需求自己设置, 而且还可以实现捕捉和PWM。通用定时器/计数器应用起来更有针对性更实际些。
    • 发布于 2018-07-31
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:17
  • systick是系统滴答器,可以使用定时器进行计时;使用滴答器也可以进行延时什么的。systick是系统里自带的,可以不用。
    • 发布于2018-07-31
    • 举报
    • 评论 0
    • 0
    • 0

  • systick是系统滴答器,不同于普通的定时器。它可用来产生操作系统的时钟节拍,便于不同处理器之间程序移植,还可作为一个闹铃测量时间。

    • 发布于2018-07-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 可以使用系统滴答器systick,也可以使用定时器。系统滴答器和定时器的区别是可以用来产生时钟节拍 。
    • 发布于2018-07-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 可以使用系统滴答器systick,也可以使用定时器。系统滴答器和定时器的区别是可以用来产生时钟节拍 。
    • 发布于2018-07-31
    • 举报
    • 评论 0
    • 0
    • 0

  • Systick属于内核的一部分,其他的定时器都是外设。 内核定时器不管你是不是stm32,只要是cortex-M系列全都一样,一般的操作系统都是用这个定时器,不同芯片间不需要做任何移植工作。
    • 发布于2018-07-31
    • 举报
    • 评论 0
    • 0
    • 0

  • systick  外设时钟都是时钟。

    systick 是核心的一个组件,使用 cortex m 核心都带。显然一个时钟不够用。所以就增加了外设时钟。


    • 发布于2018-07-31
    • 举报
    • 评论 0
    • 0
    • 0

  • systick定时器启动功耗低,计时方便,比一般的定时器中断要占用的CPU资源少。
    • 发布于2018-07-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个是系统定时器,其实也是定时器的一种,只不过给系统专用
    • 发布于2018-08-02
    • 举报
    • 评论 0
    • 0
    • 0

  • systick是系统节拍器,能够提供很精准的定时
    • 发布于2018-08-04
    • 举报
    • 评论 0
    • 0
    • 0

  • 那个是系统的滴答定时器,一般做系统的时钟或者操作系统的脉搏时钟
    • 发布于2018-08-07
    • 举报
    • 评论 0
    • 0
    • 0

  • 相当于多给了一个21位的计时器.
    • 发布于2018-08-09
    • 举报
    • 评论 0
    • 0
    • 0

  • Systick就是一个定时器而已,只是它放在了NVIC中,

    主要的目的是为了给操作系统提供一个硬件上的中断(号称滴答中断)。

    操作系统进行运转的时候,也会有“心跳”。它会根据“心跳”的节拍来工作,把整个时间段分成很多小小的时间片,

    每个任务每次只能运行一个“时间片”的时间长度就得退出给别的任务运行,这样可以确保任何一个任务都不会霸占整个系统不放。

    或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。

    因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,

    以维持操作系统“心跳”的节律。 只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息。

    • 发布于2018-08-13
    • 举报
    • 评论 0
    • 0
    • 0

  • 属于系统的脉冲定时器,可以提供准确的时钟,并且不占用硬件资源
    • 发布于2018-08-20
    • 举报
    • 评论 0
    • 0
    • 0

  • systick本身使用系统时钟的分频作为计时,调用简单,并且默认就是打开的,而定时器TIMER外设启用比较多步骤,计时也比较精确,systick和定时器分工合作,用在不同的计时场合。

    • 发布于2018-08-25
    • 举报
    • 评论 0
    • 0
    • 0

  • sys是系统的时钟,定时器是外设的时钟
    • 发布于2018-08-29
    • 举报
    • 评论 0
    • 0
    • 0

  • RCC通过AHB时钟(HCLK)8分频后作为Cortex系统定时器(SysTick)的外部时钟。通过对SysTick控制与状态寄存器的设置,可选择上述时钟或Cortex(HCLK)时钟作为SysTick时钟。通过这句话,可以看出SysTick时钟的来源,从图上也可以详细的看出SysTick是经过8分频得来的,这样好理解了,我们在手册上再仔细找,很能找到一句话:系统嘀嗒校准值固定为9000,当系统嘀嗒时钟设定为9MHz(HCLK/8的最大值),产生1ms时间基准。简单的说,我们把SysTick设置为9000时,就能产生1ms时间基准,说的明白点就是一个中断信号。计算一下:
                       系统的晶振是8MHZ,PLL9倍频以后为8MHZ*9=72MHz然后经过8分频为9MHZ,即给systick分配的时钟9MHz接下来我们再计算,一个计数周期的时间为1/9000000S 这样写更容易明白点,我要计时1ms的话,即1/1000s的时间,(1/1000)/(1/9000000)=9000可以看出我们要计时1ms的话设置为9000是这样得来的。其实上面的公式自己可以推导一下,设系统的时钟频率为SystemFrequency我们要给滴答定时器设置的值为SystemFrequency / (1/时间基准)。例如1ms的设置72000000 / (1/0.001S)=9000.通过这里我们可以很容易的分配时间。注意设置的时候不要超过24位的最大值0xffffff.
                其中在库中有专门的配置函数如下:
    static __INLINE uint32_t SysTick_Config(uint32_t ticks)
      if (ticks > SYSTICK_MAXCOUNT) return (1); /* Reload value impossible */
      SysTick->LOAD = (ticks & SYSTICK_MAXCOUNT) - 1; /* set reload register */
      NVIC_SetPriority (SysTick_IRQn (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */
      SysTick->VAL = (0x00); /* Load the SysTick Counter Value */
      SysTick->CTRL = (1 << SYSTICK_CLKSOURCE) | (1<<SYSTICK_ENABLE) | (1<<SYSTICK_TICKINT); /* Enable SysTick IRQ and SysTick Timer */
      return (0); /* Function successful */
    } 看这个函数就很好理解,配置好要基准的时间,就等中断发生吧。
    void SysTick_Handler(void)
    {
     }在中断函数,我们可以划分时间片,不要使CPU空等待.也就是到达你想要的那个时间就执行你想做的动作,主要不超出时间片的时间就行。
    • 发布于2018-07-31
    • 举报
    • 评论 0
    • -1
    • 0

相关问题

问题达人换一批

为什么stm32 本身就有定时器,还要systick干嘛