工作原理

SysTick系统滴答定时器是一个24位递减计数器计数器,向下计数,最大计数值为(

SysTick系统滴答定时器,每个时钟周期-1,减到0后申请中断,并且会自动重装初值。

注意:

  • 定时器的位数越多,定时时间更长。

  • 通过计数值间接计算定时时间,不能像操作系统直接调用函数实现延时或定时功能

系统滴答定时器的用途

没有操作系统:只用于延时(使用内核的SysTick定时器来实现延时,可以不占用系统定时器,节约资源)

有操作系统:为操作系统提供精准的系统时基。

SysTick的时钟源

可以来自两个地方:

外部参考时钟:AHB时钟8分频

内核时钟:HCLK时钟/(AHB时钟)

SysTick实现中断

1.系统定时器配置

core_cm3.h文件中 SysTick_Config(uint32_t ticks),默认的时钟源是选择的用的HCLK(内核)时钟。

示例程序:

    //系统定时器触发1KHz的中断,中断周期时间T= 1/f = 1000ms/1000=1ms//系统定时器连接到PLL输出的72MHz时钟//只要系统定时器进行72000000次计数,就是1秒时间的到达//只要系统定时器进行72000次计数,就是1ms时间的到达//只要系统定时器进行72次计数,就是1us时间的到达    SysTick_Config(SystemCoreClock/1000);void  SysTick_Handler(void)//SysTick中断服务函数

2.最大定时时间

确定最大的计数值2^24 -1,若计算到0,则进行2^24次计数

Tmax = 2^24 *1000ms/72000000 = 233ms。

3.测试结果

初始化系统定时器,1S 内核触发 1000 次中断,定时 1ms,能够成功

SysTick_Config(SystemCoreClock/1000);

初始化系统定时器,1S 内核触发 4 次中断,定时 250ms,现象失败

SysTick_Config(SystemCoreClock/4);

初始化系统定时器,1S 内核触发 5 次中断,定时200ms,能够成功

SysTick_Config(SystemCoreClock/5);

总结:填写中断频率值不能小于5,否则定时时间不准确。

SysTick_Config(SystemCoreClock/5);

SysTick实现软件延时

In many cases you might not want to use the SysTick_Config function because you might want to use the reference clock or you might not want to enable the SysTick interrupt. In these cases you need to program the SysTick registers directly,and the following sequence is recommended:

1). Disable the SysTick timer by writing 0 to SysTick->CTRL. This step is optional.It is recommended for reusable code because the SysTick could have been enabled previously.

2). Write the new reload value to SysTick->LOAD.

3). Write to the SysTick Current Value register SysTick->VAL with any value to clear the current value to 0.

4). Write to the SysTick Control and Status register SysTick->CTRL to start the SysTick timer.

If you want to use the SysTick timer in polling mode, you can use the count flag in the SysTick Control and Status Register (SysTick->CTRL) to determine when the timer reaches zero. For example, you can create a timed delay by setting the SysTick timer to a certain value and waiting until it reaches zero:

官方流程代码:

SysTick->CTRL = 0; // Disable SysTick
SysTick->LOAD = 0xFF; // Count from 255 to 0 (256 cycles)
SysTick->VAL = 0; // Clear current value as well as count flag
SysTick->CTRL = 5; // Enable SysTick timer with processor clock
while ((SysTick->CTRL & 0x00010000)==0);// Wait until count flag is set
SysTick->CTRL = 0; // Disable SysTick

使用SysTick编写延时函数,就是操控SysTick的几个寄存器

微秒级延时函数

//宏定义
#define AHB_INPUT  72  //请按RCC中设置的AHB时钟频率填写到这里(单位MHz)/********************************************************************************
函数:delay_us(u32 uS)
功能:微秒级延时函数
参数:u32 uS
返回值:无
********************************************************************************/
void delay_us(u32 uS)      //uS微秒级延时程序(参考值即是延时数,72MHz时最大值233015)
{     SysTick->LOAD=AHB_INPUT*uS;      //重装计数初值(当主频是72MHz,72次为1微秒)SysTick->VAL=0x00;        //清空定时器的计数器SysTick->CTRL=0x00000005;  //时钟源HCLK,打开定时器 5是令CTRL的第0和第二位 置1while(!(SysTick->CTRL&0x00010000)); //等待计数到0  寄存器第17位 标志位 置1SysTick->CTRL=0x00000004;//关闭定时器
}

毫秒级延时函数

/********************************************************************************
函数:delay_ms(u16 ms)
功能:毫秒级延时函数
参数:u16 mS
返回值:无
********************************************************************************/
void delay_ms(u16 ms)    //mS毫秒级延时程序(参考值即是延时数,最大值65535)
{                      while( ms-- != 0){delay_us(1000);    //调用1000微秒的延时}
}

秒级延时函数

/********************************************************************************
函数:delay_s(u16 s)
功能:秒级延时函数
参数:u16 mS
返回值:无
********************************************************************************/
void delay_s(u16 s)        //S秒级延时程序(参考值即是延时数,最大值65535)
{                      while( s-- != 0){delay_ms(1000);    //调用1000毫秒的延时}
} 

SysTick系统滴答定时器相关推荐

  1. SysTick系统滴答定时器(STM32F4xx系列)

    定时器概念 1.1 定时器的含义 1.2片上外设的定时器 1.3定时/延时原理 系统滴答定时器 2.1 为什么需要系统滴答定时器 2.2 系统滴答定时器概述 2.3 系统滴答定时器框架 2.4 系统滴 ...

  2. stm32滴答计时器_stm32笔记:Systick系统滴答定时器

    Systick :系统心跳定时器,提供系统节拍 裸机程序中可作为独立的延时定时器 用途: 1.产生操作系统的时钟节拍 2.便于不同处理器之间程序移植 SysTick定时器被捆绑在NVIC中,异常号15 ...

  3. stm32滴答计时器_STM32之系统滴答定时器

    一.SysTick(系统滴答定时器)概述 操作系统需要一个滴答定时器周期性产生中断,以产生系统运行的节拍.在中断服务程序里,基于优先级调度的操作系统会根据进程优先级切换任务,基于时间片轮转系统会根据时 ...

  4. STM32系统滴答定时器(systick)应用

    一:系统滴答定时器(systick) 1.systick介绍 Systick就是一个定时器而已,只是它放在了NVIC中,主要的目的是为了给操作系统提供一个硬件上的中断(号称滴答中断).滴答中断?这里来 ...

  5. 系统滴答定时器(systick)应用

    1.systick介绍 Systick就是一个定时器而已,只是它放在了NVIC中,主要的目的是为了给操作系统提供一个硬件上的中断(号称滴答中断).滴答中断?这里来简单地解释一下.操作系统进行运转的时候 ...

  6. 【STM32】HAL库-系统滴答定时器SysTick

    SysTick定时器被捆绑在NVIC中,是一个简单的定时器,对于CM3.CM4内核芯片,都有Systick定时器.Systick定时器常用来做延时,或者实时系统的心跳时钟.这样可以节省MCU资源,不用 ...

  7. linux调度周期systick怎么看,Cortex-M0系统滴答定时器Systick详解

    上图是LPC1114系统滴答定时器(SysTick)的结构图.系统滴答定时器位于Cortex-M0内核中,也就是说,不论是LPC1114,还是其他的Cortex-M0内核单片机,都有这个系统定时器.其 ...

  8. stm32滴答计时器_STM32 的系统滴答定时器( Systick) 彻底研究解读

    作者:王健 前言 SysTick 比起那些 TIM 定时器可以说简单多啦~~~~~哥的心情也好了不少, 嘎嘎!! ARM Cortex-M3 内核的处理器内部包含了一个 SysTick 定时器,它是一 ...

  9. stm32系统滴答定时器使用

     STM32菜鸟成长记录---系统滴答定时器(systick)应用 标签: delay任务测试reference编译器工作 2012-08-19 22:55 47395人阅读 评论(4) 收藏 举 ...

最新文章

  1. 办公室,手机上网不用愁
  2. Java Servlet监听器的分类
  3. IO-00. Hello World! (5)
  4. 安装ubuntu20.04(安装vim、gcc、VMtools、中文输入法、汉化、修改IP地址)
  5. canvas小程序-快跑程序员
  6. 关于增强学习你应该了解的五件事儿
  7. php instanceof 基类,PHP强制对象类型之instanceof操作符
  8. idea配置jfinal_intellij idea如何创建JFinal项目
  9. Unity web player-----a new version is required/insatall manually
  10. USRP N310+OAI 5G NR分支编译运行
  11. unilx安装mysql_内容更新 · web-liuyang/uni-app-tools@72f7fd7 · GitHub
  12. Git远程库代码回退
  13. linux系统运行MapReduce程序报错:exitCode 127
  14. 计算机认识新朋友教案,认识新朋友教案
  15. 电子护照阅读器|证件阅读机MEPR100+与MEPR100性能分析与差异化对比
  16. html格式化整理输出JSON示例(测试)
  17. 计算机工程与科学北京,高强铝合金加速腐蚀方法的研究-计算机工程与科学-北京航空航天大学.PDF...
  18. 告诉你四川火锅的秘密配方
  19. PTA - 电话聊天狂人
  20. oracle中sum求和

热门文章

  1. scp传输文件时指定端口
  2. firefly-rk3288j开发板--linux I2C实验之eeprom驱动
  3. 荣品RK3288开发板 怎么接23.5寸,BOA屏?
  4. 生育指南(写给临产准妈妈)
  5. 百度地图定位经纬度返回4.9E-324有关问题
  6. 表单中enter键,导致表单提交
  7. 仿照vue实现双向数据绑定兼容IE6
  8. 心碎!一张照片找到救命恩人,没过几天却听到了他离世的消息
  9. Windows10永久关闭系统更新
  10. win10安装账户卡住_关于解决win10装系统时创建帐户时卡住了的具体解决办法