使用 SysTick 定时器实现微秒级延迟函数

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

在嵌入式系统开发中,延迟函数是一个非常常用的功能,用于控制程序执行的节奏。本文将介绍如何使用 SysTick 定时器来实现一个微秒级的延迟函数 `Delay_Nus`,并对其进行改进和优化。并对应DS18B20下载文件中的延时函数讲解。

什么是 SysTick?

SysTick 是许多微控制器(例如 STM32 系列)内置的定时器,专门用于提供精确的时间延迟和定时事件。它可以通过配置加载值和控制寄存器来实现倒计时功能,适合用于产生短时间延迟。

初始代码

以下是我们最初的 `Delay_Nus` 函数代码:
void Delay_Nus(uint32_t Nus)

    SysTick->LOAD = Nus * 9;       // 将计算得出的值加载到SysTick定时器中
    SysTick->CTRL |= 0x01;         // 启用SysTick定时器
    while (!(SysTick->CTRL & (1 << 16))); // 等待计数完成
    SysTick->CTRL = 0x00000000;    // 禁用SysTick定时器
    SysTick->VAL = 0x00000000;      // 清除SysTick计数值     
}

 

 代码解析

SysTick->LOAD:设置要加载的计数值。假设 1 个滴答对应约 9 纳秒,我们乘以所需的微秒数。
SysTick->CT

STM32-笔记10-手写延时函数SysTick Systick,即滴答定时器,是内核中的一个特殊定时器,用于提供系统级的定时服务。该定时器是一个24位的倒计数定时器‌。它从设定的初值(即重载值)开始计数,每经过一个系统时钟周期,计数值就减1,直到计数到0时,SysTick计数器会自动从RELOAD寄存器中重装初值并继续计数‌ 1。如果中断使能,当计数到0时,还会触发中断‌ 1。Systick定时器的主要功能包括实现简单的延时、生成定时中断以及进行精确定时和周期定时操作。 阅读详情

相关推荐

【野火指南者】STM32F103延时函数及其系统定时器SysTick

学习目的: 1、学习STM32的系统定时器及其相关的寄存器 2、使用STM32的系统定时器来配置延时函数 内容介绍: 一、Systick简介 二、Systick相关寄存器介绍 三、使用Systick配置延时函数 一、Systick介绍 SysTick(系统定时器)是属于 CM3 内核中的一个外设,内嵌在 NVIC 中。 系统定时器 是一个 24bit 的向下递减的计数器,计数器每计数一次的时间为1SYSCLK\dfrac{1}{SYSCLK}SYSCLK1​,一般默认设置系统时钟 SYSCLK等于 .

SSA_ming的博客 1万+

Systick定时器延时函数

SysTick 是一个 24 位的倒计数定时器,当计到 0 时,将从 RELOAD 寄存器中自动重装载定时初值。只要不把它在 SysTick 控制及状态寄存器中的使能位清除,就永不停息。常用来作延时,或者实时系统的心跳时钟,SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(15)中断优先级也可设置 四个寄存器控制Systick 定时器 SysTick控制及状态寄存器(地址:0xE000_E010) 16COUNTFLAG 如果在上次读取本寄存器后,SysTick 已经...

wei20030312的博客 2137

三 STM32F4使用Sys_Tick 实现微秒定时器延时

时钟是由电路产生的周期性的脉冲信号,相当于单片机的心脏。

chunchun2021的博客 6908

STM32使用systick定时器定义硬件精准延时函数

前言 博文基于STM32F103ZET6和标准固件库V3.5.0在MDK5环境下开发; 本博文讨论的是芯片不运行操作系统的情况下完成1s的延时功能; 如有不足之处还请多多指教; SysTick—系统滴答定时器是什么? 是一个24位的硬件倒计数定时器SysTick的功能是什么?(分两种情况) 芯片运行操作系统(UCOS)情况下做:为操作系统(例如UCOS)提供硬件上的定时中断(滴答中断),...

small_is_powerful , small_is_beautiful 4964

18.Systick滴答定时器延时函数讲解

Systick滴答定时器延时函数讲解

YOURUOLI的博客 1711

【STM32F103笔记】6、Systick——做个精确的延时

在【STM32F103笔记】2、单片机中的HelloWorld——流水灯中我们曾写过一个简单的延时函数,利用空操作函数__nop()并大致计算延时时间,但这个函数并不精确,有兴趣的朋友可以再把那一篇中的程序运行结果和标准时钟比较一下。 这一篇中将使用Cortex-M3内核自带的系统时钟 (System Time)设计精确的延时函数SysTick Cortex-M3内核自带一个24位的降序计数器...

TTZZWWW 2167

【GD32F427开发板试用】Systick系统定时器使用

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:HonestQiao

weixin_47569031的博客 3064

学习记录---STM32滴答定时器

SysTick可在休眠下执行减轻资源占用 库函数在<misc.h><core_cm3.h>中 void delay_init(unsigned char systemtick)//参数为系统时钟 MHz { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//选择系统时钟8分频 nus=systemtick/8; nms=systemtick/8*1000; } void delay_us(unsigned int u

qq_30340131的博客 214

STM32_SysTick

初始化滴答定时器 延时程序

廖昌海的个人博客 1744

STM32实现微秒级延时函数3种不同方式(含独创内容哈哈)

【代码】STM32实现微秒级延时函数

饭松闹钟app,从现在开始放松 2245

31、STM32定时器:功能、配置与微秒级精确测量

本文深入探讨了STM32定时器的高级功能,包括中断输入保护、寄存器锁定机制和自动重载预加载配置,并详细分析了SysTick定时器作为系统时基的工作原理。针对微秒级精确延时需求,对比了传统软件延迟定时器中断、DWT周期计数和汇编宏四种实现方法的优缺点,提供了适用场景选择流程图,帮助开发者根据精度要求、硬件环境和性能开销选择最优方案,适用于电机控制、通信协议实现等对时序敏感的应用开发。

nept的博客 96

单片机GD32F303RCT6 (Macos环境)开发 (三)—— systick的配置

​ 设置SysTick的时钟源,若系统时钟为108MHz,经过8分频后,SysTick的时钟为13MHz,也就是说每计数一次需要的时间为 T = 1/(13MHz),换算一下,即T = 1/13 us,换言之:延时 1 微妙,需要计数13次,因此微妙级别的倍频因子fac_us即等于13,为了可移植性,fas_us = (系统内核时钟频率) / 8000000,毫秒级别的倍频因子fac_ms = 1000*fac_us即可。1、GD官方F303系统的固件库中只提供ms的延时函数,采用的是中断的方式。

weixin_43932857的博客 1590

Stm32F407基于标准库的systick实现微秒级延迟函数

​Cortex-M 内核的 System Control Block (SCB)​。

u010360773的博客 1364

STM32入门:Systick(嘀嗒定时器)学习

STM32入门:Systick(系统嘀嗒定时器)学习 一、Systick 介绍 Systick 是 STM32 的一个定时器,又名系统嘀嗒定时器Systick 的信号来源有三种:HSI(系统内部高速时钟)、PLL()、HSE(系统外部高速时钟) 二、 系统嘀嗒校准值固定为9000,当系统嘀嗒时钟设定为9MHz(HCLK/8的最大值),产生1ms时间 基准。 三、 四、 ...

混子还在路上 4万+

STM32HAL库微秒延时函数实现---DWT和SysTick

文章目录STM32 HAL库微秒延时函数实现利用SysTick实现微秒延时函数利用DWT(数据观测点)实现微秒延时函数`dwt.h`文件`dwt.c`文件`delayMicroseconds()`函数结论在这里插入图片描述结论 STM32 HAL库微秒延时函数实现 天下苦STM32 HAL库微秒延时久已。不占用其他定时器资源又不使用循环的方式就不能实现微秒延时函数了吗?答案是否定的,我们还有...

ApexYuan 9240

SysTick微秒级延迟:探索Cortex-M内核定时器的设计哲学与实战避坑指南

本文深入探讨Cortex-M内核SysTick定时器的设计原理,详细解析如何通过轮询和中断两种方式实现微秒级精确延迟,并针对STM32F407等平台提供了标准库下的实战避坑指南,重点解决了重入、中断优先级和计数器溢出等关键稳定性问题。

qsc9012345的博客 982

STM32 SysTick定时器原理与微秒级精准延时实现

SysTick是ARM Cortex-M内核集成的系统滴答定时器,作为硬件级时间基准,它克服了软件延时不可预测、不可移植、不满足实时性等固有缺陷。其核心原理是24位递减计数器配合内核时钟(HCLK或HCLK/8),通过LOAD/VAL/CTRL寄存器实现精确周期控制。技术价值在于提供低开销、高确定性、零依赖外设的计时能力,支撑RTOS滴答调度、I²C/One-Wire等时序敏感通信、非阻塞延时及周期性任务管理。本文以STM32F103(72MHz)为典型平台,详解SysTick时钟源配置、微秒级标定(如1μ

weixin_34598113的博客 408

STM32 SysTick微秒级精准延时实现与工程避坑指南

SysTick是ARM Cortex-M内核集成的24位系统定时器,作为内核级高精度时间基准,其原理基于向下计数与独立AHB时钟路径,相比APB外设定时器具有更低抖动和更高同步性。其技术价值体现在毫秒/微秒级无中断延时、RTOS节拍源及时间戳测量三大核心能力。典型应用场景包括裸机驱动开发、传感器采样同步、LED精确调光等对时序确定性要求严苛的嵌入式系统。本文围绕SysTick寄存器操作、CMSIS头文件依赖(core_cm3.h)、LOAD/VAL/CTRL配置逻辑及查询式延时实现展开,重点解决编译错误频发

weixin_29317963的博客 1040
上一篇: Python中yield的用法(笔记)
下一篇: 在使用HAl库的延时函数后,为什么会出现中断程序进入死循环不执行
小小的嵌入式开发攻城狮
博客等级 码龄5年 35粉丝 · 5原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值