首页 > 其他分享 >如何实现Delay_us和Delay_ms延时(SysTick定时器)

如何实现Delay_us和Delay_ms延时(SysTick定时器)

时间:2024-11-09 20:45:01浏览次数:3  
标签:定时器 延时 寄存器 us Delay 计数 ms SysTick 时钟

SysTick定时器(System Tick Timer)是ARM Cortex-M内核中自带的一个24位递减计数器,通常用于产生系统节拍中断,为操作系统提供时基或用于一般性定时功能。它具有以下特点和用途:

一、SysTick的介绍

1. SysTick的主要用途(计时)

操作系统心跳时基:在实时操作系统(RTOS)中,SysTick通常用于产生周期性中断,作为系统节拍,触发任务切换和延时计时等功能。

精确延时:在裸机开发中,SysTick可用于实现精确延时,适合对时间敏感的应用场景。

通用计时器:在没有其他通用计时器的情况下,SysTick可以用作简单的通用定时器。

2. SysTick的工作原理

SysTick定时器是一个24位的递减计数器,在装载寄存器(LOAD寄存器)中设置初始计数值后,定时器以固定频率递减计数。当计数到零时会产生一次中断,并重新装载计数值,开始新一轮计时。

SysTick可以选择系统时钟(HCLK)或HCLK的1/8作为时钟源。

3. SysTick定时器的寄存器

CTRL(控制和状态寄存器:用于配置启用/禁用SysTick定时器、中断、时钟源选择等。

LOAD(装载寄存器:设置计数的初始值,定时器每次计数到0后会重新装载这个值。

VAL(当前计数值寄存器):显示当前剩余的计数值。

4. 与其他定时器的区别

与其他定时器的不同(物理上):通用、基本、高级定时器位于STM32的外设模块中,通常由STM32微控制器的制造商(STMicroelectronics)提供,不属于ARM内核的一部分。这些定时器具有更丰富的功能,比如输入捕获、输出比较、PWM、编码器接口等。

二、SysTick时钟频率的设置

SysTick定时器的时钟来源是Cortex-M处理器的时钟,而Cortex-M处理器的时钟来源于外部系统时钟(SYSCLK)

如下图所示:我们设置内核时钟(Cortex的时钟)就是在设置SysTick的时钟频率了。

如何实现,设置例子如下:

参数可以是AHB 时钟(SYSCLK)的8分频或者不分频。

三、SysTick的应用(delayms,delayus)

接下来我们就可以看到如何实现微妙、毫秒的延时了。

代码将SysTick的时钟源设置为系统时钟(HCLK)的1/8

如果系统时钟(HCLK)为72 MHz,那么SysTick的时钟就是 72 MHz / 8 = 9 MHz

这样一来,SysTick定时器每秒钟计数9,000,000次,即每个计数周期的时间为 1/9 MHz = 0.111 微秒

这里fac_us就是一微秒的延时了。那么fac_ms=fac_us*1000就是毫秒了

接下来写delayus和dalayms的函数

标签:定时器,延时,寄存器,us,Delay,计数,ms,SysTick,时钟
From: https://blog.csdn.net/2301_79461876/article/details/143648405

相关文章

  • Rust为什么要搞个match匹配,直接用==判断不行吗(Rust match、Rust ==、Rust模式匹配)
    文章目录1.模式匹配2.更强的类型安全和完整性检查3.解构能力4.清晰和简洁示例Rust中的match关键字和使用==直接进行判断有着不同的用途和优势。match是一种非常强大的控制流结构,用于模式匹配,它不仅可以用来检查等值关系,还能解构、比较和检查类型中的......
  • MSE 609 Quantitative Data Analysis
    MSE609QuantitativeDataAnalysisMidterm3Instructions:PrepareyouranswersusingJupyterNotebookorRMarkdown,andsubmitasaPDForHTMLdocument.Ensureyoursubmissionisclear,organized,andwell-formatted.Usecompletesentenceswhenexplaining......
  • element-ui-plus给头像avatar增加头像框
    template部分:<el-avatarshape="square":size="50":fit="fit":src="avatarImg"class="avatar-with-border-image"/>style部分:.avatar-with-border-image{position:re......
  • NOIP集训 P11071 「QMSOI R1」 Distorted Fate 题解
    题解:P11071「QMSOIR1」DistortedFate给定一个长度为\(n\)的数组\(A\),你需要完成以下\(q\)次操作。1.1lrx将\(A_i(l\lei\ler)\)异或上\(x\)。2.2lr求:\[(\sum_{i=l}^r\bigcup_{j=l}^iA_j)\bmod2^{30}\]其中\(\bigcup\)表示按位或。Input第一行输入......
  • Rust-AOP编程实战
    文章本天成,妙手偶得之。粹然无疵瑕,岂复须人为?君看古彝器,巧拙两无施。汉最近先秦,固已殊淳漓。胡部何为者,豪竹杂哀丝。后夔不复作,千载谁与期?——《文章》宋·陆游【哲理】文章本是不加人工,天然而成的,是技艺高超的人在偶然间所得到的。其实作者所说的“天成”,并不就是大自然的......
  • [USACO05DEC] Layout G
    算法设\(dis_i\)表示第\(i\)头奶牛的坐标题目转化为对于\(M_L\)对数对\((A_i,B_i),A_i<B_i\),使得\(dis_{B_i}-dis_{A_i}\leqD_i\)对于\(M_D\)对数对\((A_i,B_i),A_i<B_i\),使得\(dis_{B_i}-dis_{A_i}\geqD_i\)对于\((i,i+1)\),有......
  • 六、MyBatis-Plus高级用法(1):最优化持久层开发
    一、MyBatis-Plus快速入门1.1简介课程版本:3.5.3.1MyBatis-Plus......
  • CF1647D Madoka and the Best School in Russia 做题记录
    我不会分讨。可以知道一个美丽数\(a\)的充要条件是\(a=d\timesk\)且\(d\nmidk\)。有个朴素的想法是将给你的\(x\)拆成\(d^p\timesk\)。显然如果\(p\le1\)那么我们拆不动。如果\(k\)可以拆成大于\(2\)个数的乘积,那么是可行的。如果\(k\)是质数,那么我们就......
  • [ARC158C] All Pair Digit Sums 题解
    C-AllPairDigitSums题意:设\(f(x)\)为\(x\)的数字和。例如\(f(158)=1+5+8=14\)。给定一个长度为\(N\)的正整数序列\(A\),求\(\sum_{i=1}^{N}\sum_{j=1}^{N}f(A_i+A_j)\)。分析:首先明确\(f(x)\)为\(x\)的数位和。举例情况:若有两个数分别为:\(12,21\)。\[f(......
  • 找不到msvcp120.dll,无法继续执行代码的15种解决方法指南
    msvcp120.dll 是一个动态链接库(DLL)文件,属于MicrosoftVisualC++RedistributablePackages的一部分。它是MicrosoftVisualStudio2013的一个组件,为运行基于VisualC++2013开发的应用程序提供必要的标准C++库支持。1.功能和作用msvcp120.dll文件封装了多种与C+......