ARM基于DWT实现硬件延时(GD32)

news2024/11/18 0:16:37

软件延时的缺点

软件延时的精度差,受系统主频影响,调教困难

硬件延时

DWT数据跟踪监视点单元硬件延时

硬件延时实现代码

delay.c

#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);
	}
}

delay.h

#ifndef _DELAY_H_
#define _DELAY_H_
void DelayInit(void);
void DelayNus(uint32_t nUs);
void DelayNms(uint32_t nMs);
#endif

main.c

#include <stdint.h>
#include "gd32f30x.h"
#include "Delay.h"


int main(void)
{    
	// 初始化延时函数
	DelayInit();
	// 使能RCU时钟
	rcu_periph_clock_enable(RCU_GPIOA);
	// 配置引脚输出频率
	gpio_init( GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, GPIO_PIN_8);

	while(1){
	   		gpio_bit_set(GPIOA, GPIO_PIN_8); 
			DelayNms(1000);
		    gpio_bit_reset(GPIOA, GPIO_PIN_8);
			DelayNms(1000);
	} 
	
}

 

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

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

相关文章

【算法入门赛】A.坐标变换(推荐学习)C++题解与代码

比赛链接&#xff1a;https://www.starrycoding.com/contest/8 题目描述 武汉市可以看做一个二维地图。 牢 e e e掌握了一项特异功能&#xff0c;他可以“瞬移”&#xff0c;每次瞬移需要分别设定 x x x和 y y y的偏移量 d x dx dx和 d y dy dy&#xff0c;瞬移完成后位置会…

JMeter 如何应用于 WebSocket 接口测试

WebSocket: 实时双向通信的探索及利用 JMeter 进行应用性能测试 WebSocket 是一项使客户端与服务器之间可以进行双向通信的技术&#xff0c;适用于需要实时数据交换的应用。为了衡量和改进其性能&#xff0c;可以通过工具如 JMeter 进行测试&#xff0c;但需要先对其进行适配以…

出差行程到底怎么管?这个“高分指南”划重点来了!

在日常商旅过程中&#xff0c;出差行程计划是必不可少的环节。公司需要以此为依据判断行程是否有必要、是否合理&#xff0c;确保出差行程与公司的业务需求相符。 通过胜意费控云&#xff0c;员工填写出差申请时&#xff0c;行程计划智能生成&#xff0c;平台自动匹配并带出差标…

EasyRecovery(易恢复) 使用测试及详细使用方法

你有没有因为数据丢失懊悔不已&#xff0c;EasyRecovery&#xff08;易恢复&#xff09;&#xff0c;来自美国拥有38年数据恢复的软件&#xff0c;只有收费版&#xff0c;重要事情说三遍&#xff0c;EasyRecovery 没有免费版&#xff0c;可以成功找回删除的部分文件&#xff0c…

歌手舞台再掀风云

《歌手》舞台再掀风云&#xff0c;重磅消息来袭——国际巨星亚当兰伯特空降踢馆&#xff0c;一场音乐盛宴即将点燃激情&#xff01;消息一出&#xff0c;粉丝欢呼&#xff0c;热议如潮。亚当兰伯特&#xff0c;这位曾让世界为之倾倒的音乐天才&#xff0c;如今即将登陆《歌手》…

工业中常见大数据技术组件

随着大数据技术在各行各业的广泛应用&#xff0c;数据产品经理的角色也变得越来越重要。了解常见的大数据技术组件对于数据产品经理来说至关重要&#xff0c;因为这有助于他们更好地设计产品架构和功能模块&#xff0c;满足数据处理和分析的需求。在处理海量数据的产品中&#…

keep健身小程序基于FastAdmin+ThinkPHP+UniApp(源码搭建/上线/运营/售后/更新)

基于FastAdminThinkPHPUniApp&#xff08;目前仅支持微信小程序和公众号&#xff09; 开发的健身相关行业微信小程序&#xff0c;程序适用于健身房、瑜伽馆、游泳馆、篮球馆等健身培训场所。平台拥有课程售卖、课程预约、多门店管理、私教预约、教练端、会员卡办理、在线商城、…

el-checkbox选中后的值为id,组件显示为label中文

直接上代码 方法一 <el-checkbox v-for"item in list" :key"item.id" :label"item.id">{{中文}} </el-checkbox> 方法二 <el-checkbox-group class"flex_check" v-model"rkStatusList" v-for"item…

Python可以自学但是千万不要乱学,避免“埋头苦学”的陷阱!

前言 Python可以自学但是千万不要乱学&#xff01; 归根结底因为学习是个反人性的过程&#xff01; 复盘没学下去的网课&#xff0c;都有以下特点&#xff1a; &#x1f605; 臣妾听不懂啊&#xff01; 初次接触编程遇到太多抽象高深的概念&#xff0c;不了解老师口中的一个…

队列 + 宽搜(BFS)

目录 leetcode题目 一、二叉树的层序遍历 二、二叉树的层序遍历 II 三、N叉树的层序遍历 四、二叉树的锯齿形层序遍历 五、二叉树最大宽度 六、在每个树行中找最大值 七、二叉树的层平均值 八、最大层内元素和 九、二叉树的第K大层和 十、反转二叉树的奇数层 leetco…

mac第三方软件怎么删除 MacBook卸载第三方应用程序 mac第三方恶意软件删除不了怎么办呢

Mac是一款优秀的个人电脑&#xff0c;它拥有流畅的操作系统、强大的性能和丰富的应用程序。但是&#xff0c;随着使用时间的增加&#xff0c;你可能会发现你的Mac上安装了一些不需要或者不喜欢的第三方软件&#xff0c;这些软件可能会占用你的空间、影响你的速度或者带来安全风…

Android 简单的下拉选择框实现

要实现这种效果,目前知道的方法有以下两种,Spinner 和 ListPopupWindow,当然肯定还有很多别的方法,这里我们先尝试使用ListPopupWindow来实现这个效果; 以下是一个简单的demo: public class MainActivity extends AppCompatActivity {private List<String> dataList;pr…

DDM-MIMO-FMCW雷达MATLAB仿真

本文在前期TDM和BPM体制的基础上&#xff0c;仿真DDM体制下的调制解调和信号处理测距、测速、测角流程。 TDM和BPM相关可以看这两篇博文TDM(BPM)-MIMO-FMCW雷达仿真-CSDN博客&#xff0c;确定性最大似然&#xff08;DML&#xff09;估计测角-CSDN博客TDM(BPM)-MIMO-FMCW雷达仿真…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷3(私有云)

#需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私聊博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私聊博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包…

Python中tkinter编程入门3

在使用tkinter创建了窗口之后&#xff0c;可以将一些控件“放置”到窗口中。这些控件包括标签、按键以及输入框等。 1 在窗口中“放置”标签 在窗口中“放置”标签主要有两个步骤&#xff0c;一是创建标签控件&#xff0c;二是将创建好的标签“放置”到窗口上。 1.1 创建标签…

[数据集][目标检测]管道焊缝质量检测数据集VOC+YOLO格式1134张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1134 标注数量(xml文件个数)&#xff1a;1134 标注数量(txt文件个数)&#xff1a;1134 标注…

【pandas】库中的apply(lambda function ,arix)

pandas.apply() 遍历DataFrame的元素&#xff08;一行或者一列数据&#xff09; 行遍历&#xff1a;axis 1 列遍历&#xff1a;axis 0 基础信息 pandas的apply()方法是用来调用一个lambda函数&#xff0c;让函数对数据对象具有批处理的特性。 pandas支持apply()调用…

钉钉群定时发送消息1.0软件【附源码】

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 有时候需要在钉钉群里提醒一些消息。要通知的群成员又不方便用定时钉的功能&#xff0c;所以写了这么一个每日定时推送群消息的工具。 易语言程序&#xff0c;附上源码与模块&#x…

cubic 相比 bbr 并非很糟糕

迷信 bbr 的人是被它的大吞吐所迷惑&#xff0c;我也不想再解释&#xff0c;但我得反过来说一下 cubic 并非那么糟。 想搞大吞吐的&#xff0c;看看我这个 pixie 算法&#xff1a;https://github.com/marywangran/pixie&#xff0c;就着它的思路改就是了。 cubic 属于 aimd-ba…

最新ChatGPT中文系统网站源码+系统部署+支持AI对话、AI绘画、AI音乐等大模型

一、系统介绍 本文将介绍最新的ChatGPT中文版AI创作系统——星河易创AI系统&#xff0c;该系统基于ChatGPT的核心技术&#xff0c;融合了自然语言问答、绘画、音乐等创作功能&#xff0c;并兼容官方GPT全模型。该系统提供多样化的应用&#xff0c;包括GPTs的多场景应用、实时G…