硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3883|回复: 22
收起左侧

[功能实战] 意外发现Cortex-M内核带64bit时间戳,比32bit的DWT时钟周期计数器更方便,再也不用担心溢出问题了

  [复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2023-8-22 05:10:24 | 显示全部楼层 |阅读模式
视频:

https://www.bilibili.com/video/BV1Bw411D7F5



介绍:
看参数手册的Debug章节,System ROM Table里面带Timestamp  generator的都是支持的,不带的不支持。当前测试H743/H750等系列是带的。与DWT时钟计数器一样,可以调试使用也可以正常程序运行使用。

QQ截图20230822044629.png

QQ截图20230822044813.png

C程序里面DWT和64bit时间戳TSG比较测试,测量结果基本一致:

QQ截图20230822045035.png

并且使用LUA小程序也可以方便控制64bit时间戳TSG:

12.png

测试代码:
[Lua] 纯文本查看 复制代码
TSG_CNTCR = 0x5C005000  --bit0 用于使能
TSG_CNTFID0 = 0x5C005020  --主频设置
TSG_CNTCVL = 0x5C005008  --低32bit
TSG_CNTCVU = 0x5C00500C  -- 高32bit

pg_init()

re = pg_write32(TSG_CNTCR, 0x00000000)  if(re == 0) then print("1") end
re = pg_write32(TSG_CNTCVL, 0x00000000)if(re == 0) then print("2") end
re = pg_write32(TSG_CNTCVU, 0x00000000)if(re == 0) then print("3") end
re = pg_write32(TSG_CNTCR, 0x00000001)if(re == 0) then print("4") end
re = pg_write32(TSG_CNTFID0, 200000000)if(re == 0) then print("5") end

for i=0,500,1 do
   a = pg_read32(TSG_CNTCVL)
   b = pg_read32(TSG_CNTCVU)
   print(string.format("%d, %d", a, b))
   delayms(100)
end


参考资料:
1、工程下载:
链接:https://pan.baidu.com/s/1__NJXovPTmiE8WrkkzEqLA 提取码:3e96

2、H7-TOOL的LUA小程序教程第8期:SWD接口函数,读写各种类型数据,内存和寄存器等
https://www.armbbs.cn/forum.php?mod=viewthread&tid=118104


评分

参与人数 2金币 +20 收起 理由
失帧 + 10 很给力!
byccc + 10 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
 楼主| 发表于 2023-8-22 05:10:31 | 显示全部楼层
整理完毕。
回复

使用道具 举报

13

主题

193

回帖

232

积分

高级会员

积分
232
发表于 2023-8-22 07:12:26 来自手机 | 显示全部楼层
牛,注意休息
回复

使用道具 举报

22

主题

319

回帖

385

积分

高级会员

积分
385
发表于 2023-8-22 09:18:02 | 显示全部楼层
  我以前都是用的两个定时器级联的,有这个就省了好多资源
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
发表于 2023-8-22 18:37:53 | 显示全部楼层
硬汉哥不用对DWT的寄存器进行解锁吗,再去初始化
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
 楼主| 发表于 2023-8-22 19:19:22 | 显示全部楼层
qq1646544 发表于 2023-8-22 18:37
硬汉哥不用对DWT的寄存器进行解锁吗,再去初始化

F4,F1,H7等系列没有这个问题,F7系列有这种问题。
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
发表于 2023-8-22 19:37:13 | 显示全部楼层
主要是看了这篇经验案例也是H7的 DWT工作

Armv7-M架构的STM32如何启用DWT进行计数_v1.0.pdf

331.72 KB, 下载次数: 104

DWT

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
 楼主| 发表于 2023-8-22 19:59:32 | 显示全部楼层
qq1646544 发表于 2023-8-22 19:37
主要是看了这篇经验案例也是H7的 DWT工作

H7系列比较简单,做个下面的处理就行:

[C] 纯文本查看 复制代码
/*
*********************************************************************************************************
*	函 数 名: bsp_InitDWT
*	功能说明: 初始化DWT. 该函数被 bsp_Init() 调用。
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void bsp_InitDWT(void)
{
	DEM_CR         |= (unsigned int)DEM_CR_TRCENA;   
	DWT_CYCCNT      = (unsigned int)0u;
	DWT_CR         |= (unsigned int)DWT_CR_CYCCNTENA;
}



回复

使用道具 举报

36

主题

2050

回帖

2158

积分

至尊会员

积分
2158
发表于 2023-8-23 09:00:28 | 显示全部楼层
tovinz 发表于 2023-8-22 09:18
我以前都是用的两个定时器级联的,有这个就省了好多资源

+1

我是用32bit定时器实现的,有了这个方便不少。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
发表于 2023-8-23 10:37:27 | 显示全部楼层
eric2013 发表于 2023-8-22 19:59
H7系列比较简单,做个下面的处理就行:

[mw_shl_code=c,true]/*

好的感谢硬汉哥
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
发表于 2023-8-23 14:40:41 | 显示全部楼层
H7x3的参考手册版本小于7的就不要看了,Debug的TSG地址不对,刚刚从ST官网下载了第8版本的H7x3的参考手册.
微信图片_20230823141436.png
回复

使用道具 举报

9

主题

171

回帖

198

积分

初级会员

积分
198
发表于 2023-8-25 17:27:56 | 显示全部楼层
实测 STM32H723/733 系列没有这个模块
回复

使用道具 举报

32

主题

297

回帖

393

积分

高级会员

积分
393
发表于 2024-3-5 09:22:42 | 显示全部楼层
请教一下F4有这个定时器吗,
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
 楼主| 发表于 2024-3-5 11:53:42 | 显示全部楼层
weiyuliang 发表于 2024-3-5 09:22
请教一下F4有这个定时器吗,

F4系列,之前查是没有,
回复

使用道具 举报

32

主题

297

回帖

393

积分

高级会员

积分
393
发表于 2024-3-5 14:47:38 | 显示全部楼层
eric2013 发表于 2024-3-5 11:53
F4系列,之前查是没有,

谢谢硬汉
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2024-8-16 15:43:26 | 显示全部楼层
感谢硬汉哥,有个问题想请教

手册RM0433 Rev 7的Figure 818显示TSG的时钟域是DAPCLK,3059页下面有解释DAPCLK:
The DAPCLK domain is enabled by the debugger using the CDBGPWRUPREQ bit in the debug port CTRL/STAT register. The clock must be enabled before the debugger can access any of the debug features on the device. It should be disabled at power up and when the debugger is disconnected, to avoid wasting energy.


可不可以这样理解,如果没有连接调试器,TSG就不能工作?
回复

使用道具 举报

48

主题

371

回帖

515

积分

金牌会员

积分
515
发表于 2024-8-16 16:44:52 | 显示全部楼层
这个特性是只有ST产品才支持的吧,我查了一下SAME70系列MCU,没有提及该特性。
另外,最近在用RISC-V平台,默认支持64Bit时间戳特性的。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
 楼主| 发表于 2024-8-17 10:45:49 | 显示全部楼层
Miaow 发表于 2024-8-16 15:43
感谢硬汉哥,有个问题想请教

手册RM0433 Rev 7的Figure 818显示TSG的时钟域是DAPCLK,3059页下面有解释D ...

实际测试不带调试器没问题。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
 楼主| 发表于 2024-8-17 10:47:25 | 显示全部楼层
wanglehui_12 发表于 2024-8-16 16:44
这个特性是只有ST产品才支持的吧,我查了一下SAME70系列MCU,没有提及该特性。
另外,最近在用RISC-V平台 ...

带Timestamp  generator才行。

像RP2040也带了一个64it时钟。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 7 天前 | 显示全部楼层
您好!关于这个视频,我有2个问题: 1、我把计数时钟频率给修改,计数结果不变。或者我直接不对频率初始化也是一样的结果。 2、H743这个计数器时钟运行频率应该是400MHz,不是200MHz,我使用HAL_delay(1),测得399,927,也就是399,927*2.5ns= 1ms
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 7 天前 | 显示全部楼层
意外发现Cortex-M内核带的64bit时间戳,比32bit的DWT时钟周期计数器更方便,再也不用担心溢出问题了。 您好!关于这个视频,我有2个问题: 1、我把计数时钟频率给修改,计数结果不变。或者我直接不对频率初始化也是一样的结果。 2、H743这个计数器时钟运行频率应该是400MHz,不是200MHz,我使用HAL_delay(1),测得399,927,也就是399,927*2.5ns= 1ms
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 7 天前 | 显示全部楼层
意外发现Cortex-M内核带的64bit时间戳,比32bit的DWT时钟周期计数器更方便,再也不用担心溢出问题了。
您好!关于这个视频,我有2个问题:
1、我把计数时钟频率给修改,计数结果不变。或者我直接不对频率初始化也是一样的结果。
2、H743这个计数器时钟运行频率应该是400MHz,不是200MHz,我使用HAL_delay(1),测得399,927,也就是399,927*2.5ns= 1ms
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
 楼主| 发表于 6 天前 | 显示全部楼层
rao2021 发表于 2025-4-19 20:49
意外发现Cortex-M内核带的64bit时间戳,比32bit的DWT时钟周期计数器更方便,再也不用担心溢出问题了。
您 ...

HAL_Delay有个这种问题,HAL_Delay(100)试试

使用HAL_Delay,注意HAL_Delay(0)表示0.xms,HAL_Delay(1)表示1.xms,依次类推
https://www.armbbs.cn/forum.php?mod=viewthread&tid=104428
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-26 01:51 , Processed in 0.429184 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表