当前位置: 首页 > news >正文

SysTick 延时与 DWT 延时

在 Cortex-M 系列 MCU 中,常见的内核级延时方式主要有SysTick 定时DWT(CYCCNT)定时。两者虽然都能实现延时,但定位和适用场景完全不同。


一、基本概念

  • SysTick
    Cortex-M 内核自带的 24 位定时器,主要用于系统节拍(Tick),通常通过中断实现延时和计时。

  • DWT(CYCCNT)
    Cortex-M 内核调试模块中的CPU 周期计数器,每个 CPU 时钟周期加 1,不依赖中断。


二、相同点

  • 都是 Cortex-M 内核资源
  • 都与 CPU 主频相关
  • 都可用于延时
  • 都不占用普通外设定时器(TIM)

三、主要区别

对比项SysTickDWT
工作方式定时器 + 中断CPU 周期计数
是否中断
精度毫秒级为主微秒级、极高
抖动受中断影响几乎无
系统侵入性
低功耗支持

四、使用场景

适合 SysTick:

  • RTOS 系统节拍
  • 系统毫秒时基
  • 任务调度
  • 长时间延时

适合 DWT:

  • 微秒级延时
  • 驱动层延时
  • 外设初始化时序
  • Bit-bang 通信

五、工程选型结论

SysTick 是“系统的钟表”,用于调度和系统时基
DWT 是“CPU 的秒表”,用于高精度短时延时

在实际项目中通常组合使用:

SysTick → 系统节拍 / RTOS

DWT → 驱动层微秒延时

ps:第一次接触DWT延时的概念,该篇内容仅做简单介绍,由AI辅助整理

附代码(引用郭天祥团队):

#include <stdint.h> #include "gd32f30x.h" /** *********************************************************** * @brief DWT初始化配置 * @param * @return *********************************************************** */ void DelayInit(void) { /* 关闭 TRC */ CoreDebug->DEMCR &= ~CoreDebug_DEMCR_TRCENA_Msk; /* 打开 TRC */ CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; /* 关闭计数功能 */ DWT->CTRL &= ~DWT_CTRL_CYCCNTENA_Msk; /* 打开计数功能 */ DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; /* 计数清零 */ DWT->CYCCNT = 0; } /** *********************************************************** * @brief 微秒级延时函数 * @param nUs,最大延时时间( 2^32 / 内核主频 ) * 10^6 us * @return *********************************************************** */ void DelayNus(uint32_t nUs) { uint32_t tickStart = DWT->CYCCNT; /* 转换为nUs对应的时钟跳动次数*/ nUs *= (rcu_clock_freq_get(CK_AHB) / 1000000); /* 延时等待 */ while ((DWT->CYCCNT - tickStart) < nUs); } /** *********************************************************** * @brief 毫秒级延时函数 * @param nMs,延时时间n毫秒 * @return *********************************************************** */ void DelayNms(uint32_t nMs) { for (uint32_t i = 0; i < nMs; i++) { DelayNus(1000); } }
http://www.cnnetsun.cn/news/130827.html

相关文章:

  • 2025年GEO优化领域横向评测:爱搜索人工智能位列第一
  • Vedbo v1.1.2 – 创意拖放式 Elementor WooCommerce 电商主题
  • 【量子计算Agent调度优化】:揭秘未来任务调度的核心算法与实战策略
  • 3步搞定智能QQ机器人:OneBot协议零门槛搭建指南
  • 阵列信号处理波束形成
  • 联想拯救者BIOS高级设置解锁:从入门到精通的完整指南
  • 终极指南:5分钟掌握Tidal音乐下载器完整使用技巧
  • 如何快速掌握vue-plugin-hiprint:Vue项目打印设计的终极解决方案
  • ReadCat开源小说阅读器:打造沉浸式数字阅读新体验
  • 物流智能调度进阶之路(量子Agent赋能路径优化实战)
  • 【医疗多模态Agent权重优化】:揭秘高效模型融合背后的黑科技
  • SD Maid SE安卓版(安卓系统清理器)
  • Zoner Photo Studio X(照片编辑管理)
  • 音频调试终极指南:ESP32嵌入式语音交互诊断工具
  • 过氧化氢泄漏后应急处置
  • Spring定时任务与Spring MVC拦截器
  • 27、趣味十足的Shell脚本游戏大揭秘
  • Realistic Vision V2.0:从零开始掌握AI图像生成核心技术
  • 语雀文档一键导出:5分钟掌握完整备份方案
  • Next.js 16与Shadcn UI后台管理系统实战指南
  • 29、Linux系统安全防护指南
  • 智能家居联动场景设计:5大核心模式与0故障部署策略
  • S7NetPlus工业自动化通信框架:构建高效PLC数据交互系统
  • 5步搞定OpenWrt Docker管理:告别命令行烦恼的终极方案
  • 【Halcon-1D测量】reset_fuzzy_measure 函数功能(用于重置模糊测量规则)
  • HTMLMinifier:3个让网站加载速度翻倍的实用技巧
  • Layui-Admin后台管理系统技术评估与实施指南
  • 全球TOP 10物联网公司都在用的Agent节能技术,你知道几个?
  • CSS Grid Generator终极指南:前端开发的高效工具
  • ELPV数据集实战指南:太阳能电池缺陷检测的完整解决方案 [特殊字符]