文章目录

  • 一、系统滴答时钟
    • 1、简介
      • 注意:
    • 2、工作原理(向下计数,向上计数)
    • 3、频率的概念
  • 二、库函数
  • 四、延时函数
    • 1、系统定时器的用途
    • 2、官方示例
    • 3、寄存器
    • 4、毫秒级延时函数
    • 5、微秒级延时函数

一、系统滴答时钟

1、简介

​ SysTick叫做系统嘀嗒时钟,系统定时器,属于Cortex-M4内核中的一个(外设)外围设备,并且是24bit向下递减的计数器

lSystick定时器,是一个简单的定时器,对于CM3,CM4内核芯片,都有Systick定时器。

lSystick定时器常用来做延时,或者实时系统的心跳时钟。这样可以节省MCU资源,不用浪费一个定时器。比如UCOS中,分时复用,需要一个最小的时间戳,一般在STM32+UCOS系统中,都采用Systick做UCOS心跳时钟

《STM32F4xx中文参考手册.pdf》 第108页

RCC 向 Cortex 系统定时器 (SysTick) 馈送 8 分频的 AHB 时钟 (HCLK) (168M/8=21M)。SysTick 可使用此时钟作为时钟源,也可使用 HCLK 作为时钟源,具体可在 SysTick 控制和状态寄存器中配置

注意:

1)定时器的位数越多,定时时间更长

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

计数值,就是要进行多少个计数

168000000 次 = 1S

168000 次 = 1ms

168 次 = 1us

2、工作原理(向下计数,向上计数)

3、频率的概念

​ 物质在1S内完成周期性变化的次数叫做频率,常用f表示。为了纪念德国物理学家赫兹的贡献,人们把频率的单位命名为赫兹,简称“赫”,符号为Hz

二、库函数

参考文档:《Cortex M3与M4权威指南.pdf》314页

固件库中的Systick相关函数:SysTick_CLKSourceConfig()  //Systick时钟源选择 misc.c文件中SysTick_Config(uint32_t ticks) //初始化systick,时钟为HCLK,并开启中断//core_cm3.h/core_cm4.h文件中
uSystick中断服务函数:void SysTick_Handler(void);

1、系统嘀嗒时钟配置

uint32_t SysTick_Config(uint32_t ticks);

示例:

系统定时器触发1khz的中断,中断周期时间T=1/f = 1000ms/1000 = 1ms

系统定时器连接到PLL输出的168Mhz时钟

只要系统定时器进行168000000次计数,就是1s时间的到达

只要系统定时器进行168000次计数,就是1ms时间的到达

只要系统定时器进行168次计数,就是1us时间的到达

SysTick_Config(SystemCoreClock / 1000);

SysTick_Config(168000); // 168MHz / 1000 = 168000

三、最大定时时间

1、确定最大的计数值224-1,若计算到0,则进行224次方计数

1000ms TMax

----- == -----

168000000 2^24

Tmax = 2^24 * 1000ms / 168000000 = ms

16,777,216 * 1000 / 168000000 = 99.86ms

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

SysTick_Config(SystemCoreClock / 1000);

初始化系统定时器,1s内内核触发10次中断,说白了,定时100ms,不能成功

SysTick_Config(SystemCoreClock / 10);

初始化系统定时器,1s内内核触发11次中断,说白了,定时90.90ms,能够成功

SysTick_Config(SystemCoreClock / 11);

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

四、延时函数

1、系统定时器的用途

没有操作系统:只用于延时

有操作系统(Ucos freertos):为操作系统提供精准的定时中断(50ms)

2、官方示例

参考文档:《Cortex M3与M4权威指南.pdf》314页

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

在许多情况下,您可能不想使用SysTick_Config函数,因为您可能想使用参考时钟或不想启用SysTick中断。在这些情况下,您需要直接对SysTick寄存器进行编程,建议采用以下顺序

  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.

通过将0写入SysTick->CTRL来禁用SysTick定时器。此步骤是可选的。建议使用可重用代码,因为之前可能已启用SysTick。

  1. Write the new reload value to SysTick->LOAD. The reload value should be the interval value e1.

将新的重新加载值写入SysTick->LOAD。重新加载值应该是间隔值e1。

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

使用任何值写入SysTick当前值寄存器SysTick->VAL,将当前值清除为0。

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

写入SysTick控件和状态寄存器SysTick->CTRL以启动SysTick定时器

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

参考文档:《Cortex M3与M4权威指南.pdf》316页

官方给的示例代码更改之后:1ms

SysTick->CTRL = 0;                     // Disable SysTickSysTick->LOAD = 168000-1;              // 配置计数值(168000-1) ~ 0SysTick->VAL = 0;                      // Clear current value as well as count flagSysTick->CTRL = 5;                     // Enable SysTick timer with processor clockwhile ((SysTick->CTRL & 0x00010000)==0);   // Wait until count flag is setSysTick->CTRL = 0;                     // Disable SysTick

参考文档:《Cortex M3与M4权威指南.pdf》315页

3、寄存器

4、毫秒级延时函数

void delay_ms(uint32_t n)
{while(n--){SysTick->CTRL = 0;                      // 关闭系统定时器SysTick->LOAD = 168000-1;                 // 配置计数值(168000-1) ~ 0    SysTick->VAL = 0;                       // 清除当前值和计数标志SysTick->CTRL = 5;                     // 使用处理器时钟启用SysTick定时器while ((SysTick->CTRL & 0x00010000)==0);// 等待直到设置计数标志}   SysTick->CTRL = 0;                      // 关闭系统定时器
}

5、微秒级延时函数


void delay_ms(uint32_t n)
{while(n--){SysTick->CTRL = 0;                      // 关闭系统定时器SysTick->LOAD = 168-1;                // 配置计数值(168-1) ~ 0SysTick->VAL = 0;                      // 清除当前值和计数标志SysTick->CTRL = 5;                     // 使用处理器时钟启用SysTick定时器while ((SysTick->CTRL & 0x00010000)==0);// 等待直到设置计数标志}   SysTick->CTRL = 0;                      // 关闭系统定时器
}

应用场景:

1、微波炉的定时控制

2、洗衣机的定时控制

3、秒表

VAL = 0; // 清除当前值和计数标志
SysTick->CTRL = 5; // 使用处理器时钟启用SysTick定时器
while ((SysTick->CTRL & 0x00010000)==0);// 等待直到设置计数标志
}
SysTick->CTRL = 0; // 关闭系统定时器
}


应用场景:1、微波炉的定时控制2、洗衣机的定时控制3、秒表4、智能定时夜灯

stm32f4xx-systick系统滴答时钟相关推荐

  1. 4、系统滴答时钟SysTick

    写在开篇前: 首先要明确的第一点:学习知识我们都会到网上查询各种资料,但是由于网上资料大多不全 面,我们对于这些资料需要加以自身的理解并对其有所取舍,所以建议网上查来的资料只做引导. 参考作用,最终确 ...

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

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

  3. SysTick系统滴答定时器

    工作原理 SysTick系统滴答定时器是一个24位递减计数器计数器,向下计数,最大计数值为() SysTick系统滴答定时器,每个时钟周期-1,减到0后申请中断,并且会自动重装初值. 注意: 定时器的 ...

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

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

  5. 【STM32F407 开发板】实验六 :SysTick 系统滴答实验

    前言: 这是第六个实验,实验五的博客我没有写,不是因为太简单了,而是因为太难了,当初给我直接干蒙圈了,其实实验五的代码很简单,就是深入底层配置寄存器原理,我就直接跪了,想要把实验五的博客写出来,至少又 ...

  6. 滴答定时器的计数模式_SysTick(系统滴答定时器)

    一.SysTick概述 Systick定时器是一个24 位的倒计数定时器,计到0时,将从RELOAD 寄存器中自动重装载定时初值.只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息 ...

  7. hal库选择滴答时钟函数_stm32h7“理解hal库框架”

    1.按照初始化流程调用的hal库文件 完成初始化工作需要调用到的hal库文件,如下表 序号功能调用hal库文件 1Module Selection(模块选择) Oscillator Values ad ...

  8. STM32F1_SysTick系统滴答

    前言 今天讲解"STM32F103 SysTick系统滴答","SysTick系统滴答"是属于Cortex-M3内核的一部分,主要是为运行的操作系统提供滴答时钟 ...

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

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

最新文章

  1. 人工智能在网络贷款中鲜为人知的事
  2. 解决python2.x文件读写编码问题
  3. 华为防火墙的技术积累
  4. plsql存储过程修改后怎么保存_证件照上传不成功,教你修改分辨率、调整照片大小...
  5. 科大星云诗社动态20210214
  6. winCE改变字库方法
  7. 卸载oracle9i精简版,oracle9i精简客户端|oracle9i客户端精简版下载_红软基地
  8. 传祺 GS4 和博越 PRO 不知道选谁?体验后的最真实的评价
  9. Android计算器 (课程设计项目)
  10. UVA 12235 Help Bubu(状压dp)***
  11. css 一直图片适配所有手机背景图
  12. oracle cogs 科目,OM模块关于COGS的生成
  13. docker安装mysql 并挂载目录
  14. Real-Time Loop Closure in 2D LIDAR SLAM 翻译和总结(一)
  15. android qq授权申请appkey,如需在APP中使用腾讯QQ登陆,需提前申请获取腾讯QQ的APPKEY和APPSecret。...
  16. C语言——利用递归函数完成斐波拉契前n项的计算
  17. Windows 2003 安全优化设置大全
  18. 微型计算机系统原理及应用实验,微型计算机系统原理及应用实验报告 .doc
  19. html初识教学反思,《初识FrontPage》教学反思
  20. 英语基础-倒装句型·部分倒装

热门文章

  1. C# 正则表达式替换制定关键词后面的所有内容
  2. 计算机报时间校准错误无法启动,电脑时间校准,详细教您怎么校正电脑时间
  3. 使用c#做一个书店买书系统
  4. 实时股票分析系统的架构与算法
  5. 工资条里藏着这些小秘密,第一个就有很多人不知道!
  6. 上传PDF文件转换图片工具类
  7. Css选择器-层次选择器(关系选择器)
  8. 2021年黑龙江企业百强排行榜:仅成立2年的黑龙江建龙投资集团有限公司营收突破1000亿元(附年榜TOP100详单)
  9. Python学习记录-判断字符串为空
  10. 简单讲解arguments是什么