news 2026/6/28 23:50:27

SysTick 延时与 DWT 延时

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/28 12:20:37

股票指数移动平均EMA和标准差变化Python代码

股票指数移动平均EMA和标准差变化计算 Python代码 在import pandas as pd import numpy as np import matplotlib.pyplot as plt # 设置中文显示 plt.rcParams["font.family"] ["SimHei", "Microsoft YaHei", "SimSun", "KaiTi&…

作者头像 李华
网站建设 2026/6/26 3:17:36

【云原生Agent治理核心策略】:揭秘高可用服务治理体系构建之路

第一章&#xff1a;云原生Agent治理的演进与核心挑战随着云原生技术的广泛应用&#xff0c;分布式系统中运行的Agent&#xff08;如Sidecar代理、监控采集器、服务网格数据平面等&#xff09;数量呈指数级增长。这些轻量级组件在提升系统可观测性、安全性和通信能力的同时&…

作者头像 李华
网站建设 2026/6/25 10:20:34

GemDesign:一键生成网页app原型设计稿

GemDesign 今天推荐一款非常适合产品经理&#xff0c;UI/UX 设计师使用的工具——GemDesign。 它是一款AI原生的高保真原型设计工具&#xff0c;能把你的想法、草图或需求迅速转变为可交互、高保真原型或专业设计界面。 支持文字描述、草图上传生成&#xff0c;提供灵活编辑…

作者头像 李华
网站建设 2026/6/26 11:56:35

如何用Golang高效处理Word文档?docx库的完整实战指南

如何用Golang高效处理Word文档&#xff1f;docx库的完整实战指南 【免费下载链接】docx Simple Google Go (Golang) library for replacing text in Microsoft Word (.docx) file 项目地址: https://gitcode.com/gh_mirrors/docx/docx 在日常开发中&#xff0c;Word文档…

作者头像 李华
网站建设 2026/6/25 20:09:17

气象监测系统升级必读(动态阈值Agent部署的4个关键步骤)

第一章&#xff1a;气象灾害 Agent 的预警阈值 在构建智能气象监测系统时&#xff0c;Agent 的预警机制依赖于精确的阈值设定。这些阈值决定了系统对极端天气事件&#xff08;如暴雨、高温、强风等&#xff09;的响应时机与级别。合理的阈值配置不仅能提升预警的准确性&#xf…

作者头像 李华
网站建设 2026/6/28 1:19:21

自动批改准确率提升80%的秘密:教育测评Agent的多模态评分模型

第一章&#xff1a;教育测评 Agent 的自动批改在现代教育技术中&#xff0c;自动批改系统正逐步成为教学评估的重要组成部分。通过引入基于人工智能的 Agent 模型&#xff0c;教师能够高效处理大量主观题与客观题的评分任务&#xff0c;同时保证评判的一致性与准确性。核心功能…

作者头像 李华