DWT硬件延时

发布时间:2026/9/22 5:53:49

DWT硬件延时
1、Cortex-M4内核架构2、硬件延时利用计数功能的硬件进行延时比如单片机片上定时器Timer内核滴答定时器(systick)等__weak void HAL_IncTick(void) { uwTick; } __weak uint32_t HAL_GetTick(void) { return uwTick; } void SysTick_Handler(void) { HAL_IncTick(); } __weak void HAL_Delay(__IO uint32_t Delay) { uint32_t tickstart 0; tickstart HAL_GetTick(); while((HAL_GetTick() - tickstart) Delay); }3、DWT监视点单元数据跟踪硬件延时方案DWT里有一个32位的寄存器叫CYCCNT它是一个向上计数器记录的是内核时钟运行的次数内核时钟跳动一次该计数器就加1如果内核时钟是120MHz那精度就是1/120M 8.3ns而单片机程序的运行时间通常都是微秒级别的所以DWT实现延时的精度是非常高的。要实现DWT延时的功能总共涉及到三个内核寄存器DEMCR 、DWT_CTRL、DWT_CYCCNT分别用于开启DWT功能、开启CYCCNT及获得系统时钟计数值当CYCCNT溢出之后会清0重新开始向上计数。如果内核时钟是120MHz直接使用CYCCNT延时最大值为 232 * 1/120M 36S。注DWT只在Cortex-M3及以上内核中存在。①使能DWT需要向DEMCR寄存器的24位写1寄存器定义位于core_cm4.hCoreDebug-DEMCR ~CoreDebug_DEMCR_TRCENA_Msk; /* 关闭 TRC */CoreDebug-DEMCR | CoreDebug_DEMCR_TRCENA_Msk;/* 打开 TRC */②使能计数器需要向CTRL寄存器的0位写1DWT-CTRL ~DWT_CTRL_CYCCNTENA_Msk; /* 关闭计数功能 */DWT-CTRL | DWT_CTRL_CYCCNTENA_Msk;/* 打开计数功能 */③计数器清零DWT-CYCCNT 0;代码编写#include stdint.h #include gd32f30x.h #include delay.h static uint32_t g_sysClock; /** *********************************************************** * 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; g_sysClock rcu_clock_freq_get(CK_SYS); } /** *********************************************************** * brief 微秒级延时函数 * param nUs最大延时时间( 2^32 / 内核主频 ) * 10^6 us * return *********************************************************** */ void DelayNus(uint32_t nUs) { uint32_t tickStart DWT-CYCCNT; /* 转换为nUs对应的时钟跳动次数*/ nUs * g_sysClock / 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); } } #ifndef _DELAY_H_ #define _DELAY_H_ #include stdint.h /** *********************************************************** * brief DWT初始化配置 * param * return *********************************************************** */ void DelayInit(void); /** *********************************************************** * brief 微秒级延时函数 * param nUs最大延时时间( 2^32 / 内核主频 ) * 10^6 us * return *********************************************************** */ void DelayNus(uint32_t nUs); /** *********************************************************** * brief 毫秒级延时函数 * param nMs延时时间n毫秒 * return *********************************************************** */ void DelayNms(uint32_t nMs); #endif

相关新闻

简单大话筛微信小程序游戏源码

简单大话筛微信小程序游戏源码

2026/9/8 15:19:41

简介: 简单大话筛微信小程序游戏源码 源码下载:https://download.csdn.net/download/m0_66047725/92879719 图片:

SonicNote聆犀AI录音卡 × Obsidian:让每一次对话,自动成为你的知识资产

SonicNote聆犀AI录音卡 × Obsidian:让每一次对话,自动成为你的知识资产

2026/8/29 10:41:52

最新版本: SonicNote Sync 插件 v1.1.7 适用平台: Obsidian 桌面版 v0.15.0(Windows / macOS / Linux) 一句话概括: 录音卡录制 → 妙记 App AI 转写总结 → 一键同步到 Obsidian,全程自动化 快速演示视频 …

基于YOLOv5的道路损坏实时检测系统开发实践

基于YOLOv5的道路损坏实时检测系统开发实践

2026/9/6 12:30:18

1. 项目概述:基于YOLOv5的道路损坏识别系统道路损坏检测一直是交通基础设施维护中的痛点问题。传统人工巡检方式效率低下且成本高昂,而基于计算机视觉的自动化检测方案正在逐步改变这一现状。我们开发的这套系统采用YOLOv5目标检测框架,能够实…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/21 18:38:46

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/21 18:41:09

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/21 18:36:40

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/21 18:37:26

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/21 18:40:29

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/21 18:36:17

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/22 0:19:28

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/21 23:38:13

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/22 0:48:53

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…