DWT硬件延时

发布时间:2026/7/9 5:07:45

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/7/9 20:04:17

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

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

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

2026/7/9 12:51:49

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

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

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

2026/7/8 22:55:04

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

Unity Input Manager 终极指南:从键盘到游戏手柄的完整配置与实战

Unity Input Manager 终极指南:从键盘到游戏手柄的完整配置与实战

2026/7/9 22:50:39

1. 项目概述:为什么你的游戏输入系统需要升级 如果你还在用 Input.GetKey(KeyCode.W) 这种硬编码的方式处理玩家输入,或者你的游戏只支持键盘,那真的有点“复古”了。我见过太多独立开发者和项目组,在游戏开发的早期阶段&#x…

为什么网站文章每天都有更新,但搜索引擎不收录?

为什么网站文章每天都有更新,但搜索引擎不收录?

2026/7/9 22:50:39

“我自己的网站,坚持每周都会去发两三篇文章,坚持都已经坚持了快半年,结果,我去查收录了多少条,查出来的时候我笑了,显示总共才收了十几页,大部分文章,都已经石沉大海了。我都怀疑搜…

TVF-EMD 信号分解:3步解决传统EMD模态混叠,Matlab 2023a代码实测

TVF-EMD 信号分解:3步解决传统EMD模态混叠,Matlab 2023a代码实测

2026/7/9 22:50:39

TVF-EMD信号分解实战:3步攻克模态混叠难题(附Matlab 2023a完整代码)在机械振动监测和心电信号分析中,工程师们常常遇到这样的困扰:当不同频率成分的信号相互交织时,传统EMD分解会产生模态混叠现象&#xff…

Unity 2D炸弹人游戏开发实战:从零实现角色控制与爆炸系统

Unity 2D炸弹人游戏开发实战:从零实现角色控制与爆炸系统

2026/7/9 22:50:39

1. 项目概述与核心价值最近在带新人入门Unity,发现很多朋友对2D游戏开发既向往又有点无从下手。理论看了一堆,但不动手敲代码、不实际看到角色动起来,总觉得隔着一层。正好,之前为了教学,我花了一周时间,用…

STM32 电子钟功耗优化:3种低功耗模式实测,待机电流降至 15μA

STM32 电子钟功耗优化:3种低功耗模式实测,待机电流降至 15μA

2026/7/9 22:50:39

STM32 电子钟功耗优化:3种低功耗模式实测,待机电流降至 15μA在电池供电的嵌入式设备中,功耗优化是决定产品续航能力的关键因素。STM32系列微控制器提供了多种低功耗模式,但如何在实际项目中合理选择和配置这些模式,往…

深度实战:Python DDD架构从混乱业务到清晰领域的技术演进

深度实战:Python DDD架构从混乱业务到清晰领域的技术演进

2026/7/9 22:40:39

深度实战:Python DDD架构从混乱业务到清晰领域的技术演进 【免费下载链接】python-ddd Python DDD example 项目地址: https://gitcode.com/gh_mirrors/py/python-ddd 面对复杂业务系统开发,你是否曾陷入这样的困境:业务逻辑像意大利…

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

2026/7/9 19:40:56

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

6个月转型AI工程师:实战路径与核心技能

6个月转型AI工程师:实战路径与核心技能

2026/7/9 18:28:30

1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公…

YOLOv5模型剪枝与量化实战:边缘设备部署优化

YOLOv5模型剪枝与量化实战:边缘设备部署优化

2026/7/8 14:04:34

1. 项目背景与核心价值在计算机视觉领域,YOLOv5因其出色的实时检测性能成为工业界宠儿。但当我们尝试将其部署到边缘设备(如树莓派、Jetson Nano或手机终端)时,立刻会遇到两个致命问题:模型体积庞大(原始YO…

平价正宗重庆火锅实测|理性避坑选型指南

平价正宗重庆火锅实测|理性避坑选型指南

2026/7/9 0:09:12

一、引言:重庆火锅消费现存痛点当下大众平价川渝火锅赛道竞争白热化,普通消费者就餐普遍面临三大选型难题:一是口味同质化严重,大量门店采用预制锅底、半成品食材,打着重庆老火锅旗号弱化牛油本味,麻辣口感…

AcFunDown:打破A站视频离线观看壁垒的终极解决方案

AcFunDown:打破A站视频离线观看壁垒的终极解决方案

2026/7/9 0:09:12

AcFunDown:打破A站视频离线观看壁垒的终极解决方案 【免费下载链接】AcFunDown 包含PC端UI界面的A站 视频下载器。支持收藏夹、UP主视频批量下载 😳仅供交流学习使用喔 项目地址: https://gitcode.com/gh_mirrors/ac/AcFunDown 想象一下这样的场景…

【复现】面向新能源消纳能力评估的年负荷序列建模及场景生成方法(Matlab代码实现)

【复现】面向新能源消纳能力评估的年负荷序列建模及场景生成方法(Matlab代码实现)

2026/7/9 0:09:12

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…