STM32 -> DWT时间计算

本文介绍基于ARM Cortex-M3内核的DWT数据监测寄存器的使用方法,包括初始化时间戳和获取时间戳的功能实现。通过DWT_CYCCNT寄存器进行周期计数,用于监测和优化程序运行时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于ARM-M3内核的DWT 数据监测寄存器:

 

dwt.c文件

#include "dwt.h"

#define DWT_CR *(uint32_t *)0xE0001000
#define DWT_CYCCNT *(uint32_t *)0xE0001004
#define DEM_CR *(uint32_t *)0xE000EDFC
#define DEM_CR_TRCENA (1 << 24)
#define DWT_CR_CYCCNTENA (1 << 0)

/* 初始化时间戳 */

void CPU_TS_TmrInit(void)

{

/* 使能DWT外设 */

DEM_CR |= (uint32_t)DEM_CR_TRCENA;

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

DWT_CYCCNT = (uint32_t)0u;

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

DWT_CR |= (uint32_t)DWT_CR_CYCCNTENA;

} 

uint32_t OS_TS_GET(void)

{
	uint32_t _get_ts;
	
	uint32_t _ts;
	
	static uint32_t _ts_bak;    /* 时间戳备份 */

	_get_ts = DWT_CYCCNT;

	if(_get_ts < _ts_bak)
		{
			/* 做溢出修正 */
			_ts = 0XFFFFFFFF - _ts_bak + _get_ts;
			
			/* 加上上次数据 即可求出本次时间差*/
			_ts = _ts+_ts_bak;
		}
	else
		{
			/* 正常情况 */
			_ts = _get_ts;
		}
		
		_ts_bak = _ts;
		
		return _ts;
} 

dwt.h文件

#ifndef _DWT_H
#define _DWT_H
#include "stm32f10x.h"

void CPU_TS_TmrInit(void);
uint32_t OS_TS_GET(void);

#endif

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值