当前位置: 首页 > news >正文

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

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

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

  1. 使能 DWT
  2. 使能 CYCCNT
  3. 清零 CYCCNT
  4. 基于 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;}}
}
http://www.hskmm.com/?act=detail&tid=40858

相关文章:

  • 2025年评价高的巧克力铁盒厂家最新TOP实力排行
  • 2025年10月珠海儿童配镜机构排行榜:从多维度出发的客观推荐
  • 2025年热门的彩印包装纸盒用户好评厂家排行
  • 2025年10月珠海儿童配镜机构评测:专业视角下的深度分析
  • 2025年10月风湿医院评测推荐:全方位对比分析报告
  • 2025年10月成都单招培训学校推荐:完整榜单与深度评测
  • 2025年10月上海胎记医院评价指南:从资质到服务的全面对比分析
  • 2025年10月上海胎记医院选择排行:基于真实用户反馈的实用指南
  • 见过哪些醍醐灌顶的Java代码:从卧槽到原来如此的顿悟
  • 2025年10月308nm准分子推荐榜:五款设备权威对比与选择指南
  • 2025年靠谱的六氟化硫断路器厂家推荐及选购参考榜
  • 2025年比较好的防静电泡棉厂家推荐及选择参考
  • 2025年10月上海血管瘤医院评测指南:口碑排行与选择建议
  • 2025年10月上海血管瘤医院推荐榜单:五家机构综合对比分析
  • 2025年10月上海血管瘤医院评价推荐:专业对比与选择指南
  • 2025年热门的指纹家用防盗智能门锁TOP实力厂家推荐榜
  • P5434 有标号荒漠计数
  • 2025年热门的陕西法兰阀门厂家推荐及采购指南
  • 2025年热门的隧道炉厂家最新推荐权威榜
  • 使用 Word 模板占位符生成文档的技术方案实践
  • 35435
  • 454554
  • 2025年化工设备公司行业洞察与排名前十榜单
  • 2025汽车传动轴钢管品牌综合评测与排名前十
  • 2025年口碑好的压力容器公司排名前十
  • 2025年口碑好的压力容器品牌前十强排名
  • 2025年口碑好的压力容器品牌前十强排行榜
  • 【GitHub每日速递 251030】10.6k star! 吐血整理!超全免费数学资源大集合,涵盖各分支与学习平台
  • CSP-2025 邮机
  • 模拟退火吙