news 2026/8/10 17:46:04

STM32之使用DWT外设编写延时函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32之使用DWT外设编写延时函数

T 是一个调试外设,它的核心功能之一是 CYCCNT(Cycle Count),这是一个32位递增计数器,用于记录 CPU 执行的时钟周期数量。我们可以通过对这个计数器的变化来实现高精度延时。

在使用 DWT 延时之前,需要完成以下操作:

使能 DWT

使能 CYCCNT

清零 CYCCNT

基于 CYCCNT 实现延时逻辑

源码如下:

dwt.delay.h文件

#ifndef __DWT_DELAY_H

#define __DWT_DELAY_H

#include "stm32g4xx.h"

/* 获取内核时钟频率 */

#define GET_CPU_ClkFreq() HAL_RCC_GetSysClockFreq()

uint32_t CPU_TS_TmrRd(void);

HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority);

//最大延时值为8秒

void dwt_delay_us(uint32_t us);

#define HAL_Delay(ms) dwt_delay_us(ms*1000)

#define dwt_delay_s(s) dwt_delay_us(s*1000000)

#endif /* __DWT_DELAY_H */

dwt_delay.c文件

#include "dwt_delay.h"

#define DWT_CR *(__IO uint32_t *)0xE0001000

#define DWT_CYCCNT *(__IO uint32_t *)0xE0001004

#define DEM_CR *(__IO uint32_t *)0xE000EDFC

#define DEM_CR_TRCENA (1 << 24)

#define DWT_CR_CYCCNTENA (1 << 0)

/**

* @brief 初始化时间戳

* @param 无

* @retval 无

* @note 使用延时函数前,必须调用本函数

*/

HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)

{

/* 使能DWT外设 */

DEM_CR |= (uint32_t)DEM_CR_TRCENA;

/* DWT CYCCNT寄存器计数清0 */

DWT_CYCCNT = (uint32_t)0u;

/* 使能Cortex-M DWT CYCCNT寄存器 */

DWT_CR |= (uint32_t)DWT_CR_CYCCNTENA;

return HAL_OK;

}

/**

* @brief 读取当前时间戳,每1ms更新一次

* @param 无

* @retval ms时间戳

*/

uint32_t HAL_GetTick(void)

{

return ((uint32_t)DWT_CYCCNT/(GET_CPU_ClkFreq()*1000));

}

/**

* @brief 采用CPU的内部计数实现精确延时,32位计数器,最大延时时间8秒

* @param us : 延迟长度,单位1 us

* @retval 无

*/

void dwt_delay_us(uint32_t us)

{

uint32_t ticks;

uint32_t told,tnow,tcnt=0;

ticks = us * (GET_CPU_ClkFreq() / 1000000); /* 需要的节拍数 */

tcnt = 0;

told = (uint32_t)DWT_CYCCNT; /* 刚进入时的计数器值 */

while(1)

{

tnow = (uint32_t)DWT_CYCCNT;

if(tnow != told)

{

if(tnow > told)

{

tcnt += tnow - told;

}

else /* 重新装载 */

{

tcnt += UINT32_MAX - told + tnow;

}

told = tnow;

/*时间超过/等于要延迟的时间,则退出 */

if(tcnt >= ticks)break;

}

}

}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/10 14:17:05

AI视频生成技术原理与行业应用 - AI视频技术原理与架构

AI视频技术原理与架构一、AI视频生成的核心逻辑与完整流程1. 核心定义&#xff1a;什么是AI视频生成模型&#xff1f;2. 完整流程&#xff1a;从数据到视频的四步走二、技术范式演进&#xff1a;从早期探索到主流架构1. 四大基础技术范式对比2. 范式演进时间线3. 主流架构&…

作者头像 李华
网站建设 2026/8/9 22:48:01

全新首发:考虑多尺度序列间相关性的多元时间序列预测。 结合了频域分析和自适应图卷积算法,效果显...

全新首发&#xff1a;考虑多尺度序列间相关性的多元时间序列预测。 结合了频域分析和自适应图卷积算法&#xff0c;效果显著 特点如下&#xff1a; 1.这是一种先进的深度学习模型&#xff0c;旨在利用频域分析和自适应图卷积捕捉多个时间尺度上不同的序列间相关性。 通过利用频…

作者头像 李华
网站建设 2026/8/10 16:11:40

经典低压带隙基准Banba的探索

经典低压带隙基准Banba&#xff0c;电流模结构&#xff0c;有版图 VDD&#xff1d;1.5V&#xff0c;输出为890mv&#xff0c;前仿真ppm为22.7&#xff0c;想要别的电压值可以自己再做调整 工艺是smic130nm 包含两个bandgap电路在里面&#xff0c;有一个是有完整版图&#xff0c…

作者头像 李华
网站建设 2026/8/11 3:45:03

必看!这几家性价比超高的音乐喷泉企业,你知道吗?

《音乐喷泉哪家好&#xff1a;排名前五深度测评》开篇&#xff1a;定下基调在城市的夜晚&#xff0c;音乐喷泉那灵动的水幕在灯光与旋律中翩翩起舞&#xff0c;成为了一道亮丽的风景线。越来越多的场所希望引入音乐喷泉来增添氛围和吸引力&#xff0c;因此对音乐喷泉产品的选择…

作者头像 李华
网站建设 2026/8/9 16:44:37

10个实用技巧快速上手NVIDIA CUDA Samples项目

10个实用技巧快速上手NVIDIA CUDA Samples项目 【免费下载链接】cuda-samples cuda-samples: NVIDIA提供的CUDA开发示例&#xff0c;展示了如何使用CUDA Toolkit进行GPU加速计算。 项目地址: https://gitcode.com/GitHub_Trending/cu/cuda-samples NVIDIA CUDA Samples项…

作者头像 李华