STM32 SysTick定时器

原创 2017年03月02日 19:12:27

一、说明

SysTick 定时器是实时操作系统专用的,但是也可以作为一个标准的递减计数器使用。它具有以下特点:

  • 1、24位递减计数器(16777216)
  • 2、自动装填能力
  • 3、计数器达到 0 时,有可屏蔽的系统中断产生。
  • 4、可编程时钟源 (HCLK 或者 HCLK/8)

该定时器具有四个寄存器,如下表所示:

这里写图片描述

这里写图片描述

一般,该定时器的计数周期为一毫秒,则寄存器LOAD中的值根据 MCU 主频的不同而不同。例如,主频为 16MHz,则填入该寄存器的值为16 000。也就是,每一秒执行16 000 000 次,那么每毫秒执行 16 000 次。

二、代码

使用该定时器非常容易,官方的演示代码中几乎后使用了这个定时器。这是因为延时函数 HAL_Delay()底层就是调用的这个定时器。所以对这个定时器其实不用添加或修改任何代码的。以 STM32Cube_FW_F4_V1.14.0固件库为例,说明这个定时器的配置代码。

  • 1、芯片上电或者复位后,运行 HAL_Init()这个函数,用于一些初始化的设置,这 其中就包括对 SysTick 定时器的设置的HAL_InitTick()

    init

    inittick

  • 2、在HAL_InitTick()中,设置了定时器计数值,开启定时器,设置定时器的中断优先级。

    hal_InitTick

  • 3、由于芯片默认使用的时钟为内部高速时钟,此时定时器的时钟源HCLK的大小,即SystemCoreClock的值,为内部高速时钟的频率。下一步就会去配置系统时钟,为了达到更高的主频,此时可能会使用外部高速时钟。

    cube

  • 4、随着时钟的改变,主频会发生变化,相应的定时器的值也要根据主频做出调整,以保障定时器的计数周期始终保持不变,为 1ms。但是这个不必我们再次去设置,因为每次调用 HAL_RCCC_ClockConfig() 去配置时钟后,都会自动的重新计算SystemCoreClock的值,并调用 HAL_InitTicK() 设置定时器的计数值。

    update

三、总结


  • 1、SysTick 定时器是非常好用的定时器,而且几乎不用配置,因为演示代码里基本上都有。而且会自动根据主频重新设置计数值,保证计数周期为 1ms。
  • 2、一开始走了一些弯路,觉得这个定时器在任何主频下都会定时 1ms ,和设置的主频没关系,其实是因为每次修改主频都都会重新设置计数值。注释里说的很明白。如下:

@note This function is called automatically at the beginning of program after reset by HAL_Init() or at any time when clock is reconfigured by HAL_RCC_ClockConfig().

版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎访问个人主页 http://cyang.tech https://blog.csdn.net/u011303443/article/details/59620499

STM32滴答定时器(Systick)详细详细解析

在ARM Cortex-M3内核中有一个Systick定时器,它是一个24位的倒计数定时器,当计数到0时,它就会从Load寄存器中自动重装定时初值,只要不把CTRL寄存器中的ENABLE清0,它就永不...
  • u012351051
  • u012351051
  • 2016-04-26 16:42:47
  • 6964

stm32之Cortex系统定时器(SysTick)

SysTick时钟,俗称“嘀嗒定时器”,它能按设定的时间产生一次中断。控制工程代码中随处可见形如delay_ms()之函数。但是一直不清楚其内在机制。今天花时间研究了一下。首先还是在数据手册上看一下S...
  • XJTU_Richthofen
  • XJTU_Richthofen
  • 2016-02-27 14:25:56
  • 1244

STM32学习笔记——使用SysTick定时器做延时

开学了,无法再像假期一样能够一整天玩板了!好在这学期的课说少不少,说多也不多,每周也有十几大节。剩下的时间除去学生工作等一些七七八八的事情,间断着还是能看看教程玩玩板!越发发现《STM32菜鸟学习手册...
  • SahPah
  • SahPah
  • 2014-08-13 12:04:20
  • 2895

STM32 SysTick定时器常见问题及延时函数的实现

Q:什么是SYSTick定时器? SysTick 是一个24 位的倒计数定时器,当计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除...
  • yuanmeixiang
  • yuanmeixiang
  • 2016-10-26 11:17:05
  • 2300

STM32F4学习笔记5——SysTick定时器

SysTick 定时器被捆绑在 NVIC 中,用于产生 SYSTICK 异常(异常号:15)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。例如,为多个任务许...
  • z312811966
  • z312811966
  • 2016-05-09 15:26:09
  • 2830

STM32F030, 使用嘀嗒定时器Systick实现LED闪烁

本文主要解决两个问题 1 STM32的IO口要反转,怎么实现? 2 嘀嗒定时器systick的配置 解答1:      单片机的口,反转很容易。sbit led = P1 ^6;  led = ~...
  • zwj695535100
  • zwj695535100
  • 2015-07-14 11:53:55
  • 2300

使用STM32的systick定时器中断实现RTC工作过程出错

开发环境:keil MDK V5.10 操作系统:windows 7(32位) 目标硬件:STM32F10
  • zbp_uestc
  • zbp_uestc
  • 2014-05-05 21:53:37
  • 1680

为什么32的嘀嗒定时器在低功耗stop模式唤醒后会比较缓慢

首先我们看到M4的编程手册,里面有systick的时钟来源介绍,可以看到systick的计数源的AHB或者AHB/8。 systick的配置函数如下,可以看到选择的时钟源时AHB。 __STATI...
  • ycli12
  • ycli12
  • 2015-09-26 08:57:22
  • 1134

stm32学习笔记之用systick写delay

一、系统滴答SysTick定时器        SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。大多数操作系统需要一个硬件定时器来产生滴答中断,作为整个系统的时基。...
  • call_me_sanjin
  • call_me_sanjin
  • 2017-02-21 22:12:00
  • 1117

一、STM32F4_SYSTICK定时器

关于SYSTICK定时器的说明,在STM32F4的参考手册中并没有提到,因为这个定时器是属于Cortex内核的内容。在《Cortex M3权威指南》中,可以在第八章,也即“NVIC与中断控制”那一章节...
  • u010076999
  • u010076999
  • 2016-03-19 00:11:21
  • 878
收藏助手
不良信息举报
您举报文章:STM32 SysTick定时器
举报原因:
原因补充:

(最多只允许输入30个字)