DWT硬件延时

news2025/1/11 12:46:32

DWT硬件延时


文章目录

  • DWT硬件延时
  • 软件&硬件延时方案
    • 软件延时
    • 硬件延时方案
  • DWT硬件延时方案
    • DWT硬件延时方案
    • DEMCR寄存器
    • DWT硬件延时方案实现
      • 延时初始化:
      • US延时:
      • MS延时:


软件&硬件延时方案

软件延时

static void Delay(uint32_t count){
while (count--);
}

软件延时的缺点:

  1. 延时精度差;

  2. 受系统主频影响,调校困难。

硬件延时方案

硬件延时,利用计数功能的硬件进行延时,比如单片机片上定时器(Timer) ,内核滴答定时器(systick)等:

void SysTick_Handler(void){
HAL_IncTick();
}
__weak void HAL_IncTick(void){
uwTick++;
}
__weak void HAL_Delay(_IO uint32_t Delay){

uint32_t tickstart = 0;
tickstart = HAL_GetTick();
while((HAL_GetTick() - tickstart) < Delay);

}
__weak uint32_t HAL_GetTick(void){
return uwTick;
}

DWT硬件延时方案

Cortex-M4内核架构图
在这里插入图片描述

DWT硬件延时方案

  • DWT里有一个32位的寄存器叫CYCCNT,它是一个向上计数器,记录的是内核时钟运行的次数,内核时钟跳动一次,该计数器就加1,如果内核时钟是120MHz,那精度就是1/120M = 8.3ns,而单片机程序的运行时间通常都是微秒级别的,所以DWT实现延时的精度是非常高的。
  • 要实现DWT延时的功能,总共涉及到三个内核寄存器: DEMCR、 DWT_CTRL、 DWT_CYCCNT,分别用于开启DWT功能、开启CYCCNT及获得系统时钟计数值;当CYCCNT溢出之后,会清O重新开始向上计数。
  • 如果内核时钟是120MHz,直接使用CYCCNT延时最大值为: 232*1/120M = 36S

DEMCR寄存器

使能DWT,需要向DEMCR寄存器的24位写1,寄存器定义位于core_cm4.h:

CoreDebug->DEMCR &=
~CoreDebug_DEMCR_TRCENA_Msk;

CoreDebug->DEMCR |=
CoreDebug_DEMCR_TRCENA_Msk;

DWT硬件延时方案实现

使能计数器,需要向CTRL寄存器的0位写1:

DWT->CTRL &= ~DWT_CTRL_CYCCNTENA_Msk;
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;

计数器清零:

DWT->CYCCNT = 0;

延时初始化:

/*
@brief DWT初始化配置
*
@param
@return
*/
void Delaylnit(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;
}

US延时:

/*
@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);
}

MS延时:

/*
@brief 毫秒级延时函数
@param nMs,延时时间n毫秒
*
@return
*/
void DelayNms(uint32_t nMs){
for (uint32_ti = 0; i < nMs; i++){
DelayNus(1000);
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1471571.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Maven【1】(命令行操作)

文章目录 一丶创建maven工程二、理解pom.xml三、maven的构建命令1.编译操作2.清理操作3.测试操作4.打包操作5.安装操作 一丶创建maven工程 首先创建这样一个目录&#xff0c;然后从命令行里进入这个目录&#xff1a; 然后接下来就在这个命令行里进行操作了。 这个命令是&…

Unity中URP实现水体(水下的扭曲)

文章目录 前言一、使用一张法线纹理&#xff0c;作为水下扭曲的纹理1、在属性面板定义一个纹理&#xff0c;用于传入法线贴图2、在Pass中&#xff0c;定义对应的纹理和采样器3、在常量缓冲区&#xff0c;申明修改 Tilling 和 Offset 的ST4、在顶点着色器&#xff0c;计算得到 应…

代码随想录算法刷题训练营day23

代码随想录算法刷题训练营day23&#xff1a;LeetCode(669)修剪二叉搜索树、LeetCode(108)将有序数组转换为二叉搜索树、LeetCode(538)把二叉树转化为累加树 LeetCode(669)修剪二叉搜索树 题目 代码 /*** Definition for a binary tree node.* public class TreeNode {* …

使用解决方案为PowerApps搭建测试环境

为Power Apps搭建另外一套环境 背景描述环境准备开发环境开发项目项目介绍开发环境SharePoint准备测试环境SharePoint准备解决方案创建创建解决方案环境变量准备创建站点环境变量创建文档库环境变量解决方案中创建Apps解决方案中创建power automate测试查看流运行记录查看Share…

TLS1.2抓包解析

1.TLS1.2记录层消息解析 Transport Layer SecurityTLSv1.2 Record Layer: Handshake Protocol: Client HelloContent Type: Handshake (22)Version: TLS 1.0 (0x0301)Length: 253Content Type&#xff1a;消息类型&#xff0c;1个字节。 i 0Version&#xff1a;协议版本&…

并发情况下数据校验-基于数据库实现

并发情况下数据校验-基于数据库实现 数据库行锁原理实际操作数据准备开启事务&#xff0c;更新数据 项目实战项目配置多线程测试 在开发过程中&#xff0c;我们会遇到校验数据的唯一性&#xff0c;数据更新之后是否超过设置的阈值等等。并发情况下数据校验常见方式有使用分布式…

辽宁博学优晨教育视频剪辑培训探索学习新意义

在当今数字化快速发展的时代&#xff0c;视频已成为信息传达的重要载体。辽宁博学优晨教育视频剪辑培训应运而生&#xff0c;不仅为学员提供了专业的学习平台&#xff0c;更在探索学习的意义方面赋予了新的内涵。 视频剪辑作为现代媒体行业的重要技能&#xff0c;其学习意义不仅…

高速稳定、网络隔离,解析“向日葵控控”远控方案在医疗行业应用

在医疗大健康领域&#xff0c;依托高速发展的信息化技术加速布局智能化&#xff0c;通过远程手段提高医疗服务质量、促进医疗资源共享、提升医疗工作效率&#xff0c;已成为医院和各类社区诊所等提供关键医疗服务部门近年来的发展目标之一。 同时&#xff0c;根据医疗领域的特殊…

点云数据处理常用外部库(C++/Windows)的项目配置

一、点云数据处理常用外部库&#xff08;C版本&#xff09;的下载安装与项目配置 &#xff08;一&#xff09;PCL 基于VS2019编程平台的PCL外部库下载安装及项目配置已有大量博客&#xff0c;本文不再赘述。具体下载安装及项目配置流程可参考外部库编译配置参考资料/*1*/ 。需…

linux+fortify

系统版本:Ubuntu22.04桌面版 一:登录root用户关闭防火墙 sudo passwd root systemctl stop ufw.service systemctl disable ufw.service 二:开启ssh服务 sudo apt update sudo apt install openssh-server sudo systemctl start ssh sudo systemctl status ssh连接上WinS…

开年大吉!安全狗入选工信部工业互联网试点示范名单

近日&#xff0c;工业和信息化部信息通信管理局公布了2023年工业互联网试点示范名单。此次名单根据《工业和信息化部办公厅关于组织开展2023年工业互联网试点示范项目申报工作的通知》&#xff08;工信厅信管函﹝2023﹞319号&#xff09;&#xff0c;经企业申报、地方推荐、专家…

亚马逊测评 能让买家更快速的喜欢上你的产品,提高转化率

在当今的电子商务时代&#xff0c;亚马逊作为全球最大的在线零售商之一&#xff0c;已经成为了消费者购买各种商品的首选平台。然而&#xff0c;对于消费者来说&#xff0c;如何选择适合自己的产品成为了他们面临的一大难题。因此&#xff0c;本文将介绍亚马逊上如何让买家通过…

盲盒小程序开发:探索技术与创意的融合

盲盒&#xff0c;这种充满惊喜和趣味性的商品销售模式&#xff0c;近年来在国内市场迅速崛起。它结合了收藏、交换、抽奖等多种消费体验&#xff0c;吸引了大量年轻消费者。随着移动互联网的普及&#xff0c;盲盒小程序的开发为这一市场注入了新的活力。本文将探讨盲盒小程序开…

yolov8学习笔记(二)模型训练

目录 yolov8的模型训练 1、制作数据集&#xff08;标记数据集&#xff09; 2、模型训练&#xff08;标记数据集、参数设置、跟踪模型随时间的性能变化&#xff09; 2.1、租服务器训练 2.2、加训练参数 2.3、看训练时的参数&#xff08;有条件&#xff0c;就使用TensorBoard&…

BFS中的多源BFS-双端队列BFS

2024-01-30(树与图的深度优先遍历、广度优先遍历、拓扑排序&#xff09;-CSDN博客 2024-01-31&#xff08;最短路径&#xff09;-CSDN博客 多源BFS 173. 矩阵距离 - AcWing题库 求出每个位置到所有为1的点的最短距离 import java.util.*; import java.io.*;class PII{int…

linux系统---安装使用nginx

目录 一、编译安装Nginx 1、关闭防火墙&#xff0c;将安装nginx所需要软件包传到/opt目录下 ​编辑2、安装依赖包 3、创建运行用户、组 4、编译安装nginx 5、创建软链接后直接nginx启动 ​编辑 6、创建nginx自启动文件 ​编辑6.1 重新加载配置、设置开机自启并开启服务…

LeetCode_Java_动态规划系列(1)(题目+思路+代码)

目录 斐波那契类型 746.使用最小花费爬楼梯 矩阵 120. 三角形最小路径和 斐波那契类型 746.使用最小花费爬楼梯 给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。…

知网G4《教育界》正规期刊吗?投稿难吗?

知网G4《教育界》正规期刊吗&#xff1f;投稿难吗&#xff1f; 《教育界》杂志&#xff0c;定位于教育专业的教育类权威性学术期刊&#xff0c;教育类核心期刊&#xff0c;本刊是经国家新闻出版出版总署批准的纯教育类权威期刊。 《教育界》知网G4,刊期24年底&#xff0c;收幼…

【ArcGIS】基于DEM/LUCC等数据统计得到各集水区流域特征

基于DEM/LUCC等数据统计得到各集水区流域特征 提取不同集水区各类土地利用类型比例步骤1&#xff1a;划分集水区为独立面单元步骤2&#xff1a;批量掩膜提取得到各集水区土地利用类型比例步骤3&#xff1a;导入各集水区LUCC数据并统计得到各类型占比 提取坡度特征提取河网密度特…

SQL-多表查询

多表关系 一对多&#xff08;多对一&#xff09; 在多的一方建立外键&#xff0c;指向一的一方的主键。多对多 建立第三张中间表&#xff0c;中间表至少包含两个外键&#xff0c;分别关联两方主键。一对一 在任意一方加入外键&#xff0c;关联另外一方的主键&#xff0c;并且设…