硬汉嵌入式论坛

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

[STM32F7] stm32F767 使用DWT一点问题

  [复制链接]

15

主题

34

回帖

79

积分

初级会员

积分
79
发表于 2018-5-29 11:41:14 | 显示全部楼层 |阅读模式
stm32F767 使用DWT 来设计延时函数  ,程序如下  初始化  ,但是 我只有在使用jlink调试器的时候  才起作用。 关机 ,拿掉jlink 重新启动的话 ,dwt不计数 了 。就是说 才调试情况下 ,这dwt才工作 。我怀疑过M4
内核可能和M7不一样  ,查了 头文件,还有  ARMV7-M Architecture Reference Manual。 看寄存器的地址什么的都是一样的。
但是就是不行  这个在429上面运行就没啥问题。。。。。。  有谁用过的吗?指教一下  谢谢
(使用的是 Eric的 429 上面的程序原型 )


#define  DWT_CYCCNT  *((volatile unsigned int *)0xE0001004)
#define  DWT_CR      *((volatile unsigned int *)0xE0001000)
#define  DEM_CR      *((volatile unsigned int *)0xE000EDFC)
#define  DBGMCU_CR   *((volatile unsigned int *)0xE0042004)
#define  ITM_LAR     *((volatile unsigned int *)0xE0000FB0)
#define  DEM_CR_TRCENA               (1 << 24)
#define  DWT_CR_CYCCNTENA            (1 <<  0)


void bsp_DWT_Init(void)
{
        //ITM_LAR         = 0xC5ACCE55;
        DEM_CR         |= (unsigned int)DEM_CR_TRCENA;   /* Enable Cortex-M4's DWT CYCCNT reg.  */
        //ITM_LAR         = 0xC5ACCE55;
        DWT_CYCCNT      = (unsigned int)0u;
        DWT_CR         |= (unsigned int)DWT_CR_CYCCNTENA;
}




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2018-5-29 11:44:30 | 显示全部楼层
F7的问题最好上ST中文社区stmcu.org咨询,因为我没有用过

不好回复你。
回复

使用道具 举报

15

主题

34

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2018-5-29 11:58:33 | 显示全部楼层
好  问一下 感谢回答
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2018-5-29 11:59:37 | 显示全部楼层
anvy178 发表于 2018-5-29 11:58
好  问一下 感谢回答

H7是没问题的,我一直在用,你的F7不清晰什么情况了。
回复

使用道具 举报

15

主题

34

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2018-5-29 13:58:31 | 显示全部楼层
eric2013 发表于 2018-5-29 11:59
H7是没问题的,我一直在用,你的F7不清晰什么情况了。

我 用串口 打印了一下   好像是没有写进去 那个使能位  读出来还是0 奇怪
回复

使用道具 举报

609

主题

3049

回帖

4896

积分

至尊会员

积分
4896
发表于 2018-9-19 21:23:39 | 显示全部楼层
本帖最后由 hpdell 于 2018-9-19 23:13 编辑
anvy178 发表于 2018-5-29 13:58
我 用串口 打印了一下   好像是没有写进去 那个使能位  读出来还是0 奇怪

终于搞定了,原来是寄存器地址定义错了
#define  ITM_LAR     *((volatile unsigned int *)0xE0000FB0)

需要改成

#define  ITM_LAR     *((volatile unsigned int *)0xE0001FB0)


void bsp_DWT_Init(void)
{
        DEM_CR         |= (unsigned int)DEM_CR_TRCENA;   /* Enable Cortex-M4's DWT CYCCNT reg.  */
        ITM_LAR         = 0xC5ACCE55;
        DWT_CYCCNT      = (unsigned int)0u;
        DWT_CR         |= (unsigned int)DWT_CR_CYCCNTENA;
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2018-9-20 00:27:59 | 显示全部楼层
hpdell 发表于 2018-9-19 21:23
终于搞定了,原来是寄存器地址定义错了
#define  ITM_LAR     *((volatile unsigned int *)0xE0000FB0)
...

回复

使用道具 举报

609

主题

3049

回帖

4896

积分

至尊会员

积分
4896
发表于 2018-9-20 09:19:11 | 显示全部楼层

共同进步,相互学习,
回复

使用道具 举报

5

主题

95

回帖

110

积分

初级会员

积分
110
发表于 2019-11-15 13:34:08 | 显示全部楼层
我今天遇到了一样的问题,也是折腾了半天
回复

使用道具 举报

5

主题

95

回帖

110

积分

初级会员

积分
110
发表于 2019-11-15 13:52:39 | 显示全部楼层
hpdell 发表于 2018-9-19 21:23
终于搞定了,原来是寄存器地址定义错了
#define  ITM_LAR     *((volatile unsigned int *)0xE0000FB0)
...

太厉害了
回复

使用道具 举报

1

主题

28

回帖

31

积分

新手上路

积分
31
发表于 2020-3-5 11:18:06 | 显示全部楼层
好帖,谢谢楼主
回复

使用道具 举报

1

主题

28

回帖

31

积分

新手上路

积分
31
发表于 2020-3-17 10:14:33 | 显示全部楼层
hpdell 发表于 2018-9-19 21:23
终于搞定了,原来是寄存器地址定义错了
#define  ITM_LAR     *((volatile unsigned int *)0xE0000FB0)
...

其实ITM的LAR确实地址确实是0xE0000FB0,而DWT的LAR地址才是0xE0001FB0,这配置的是DWT,所以应该是解锁DWT而不是ITM,当把ITM->LAR的地址改成DWT->LAR的地址后,其实就是解锁了DWT,哈哈
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
发表于 2021-10-14 22:59:51 | 显示全部楼层
老哥,在407上用dwt是不是需要硬复位才能计数,我得debug是正常的,然后下载完就不运行,按下复位键才运行,你的也是这样吗,
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
发表于 2022-8-29 17:05:18 | 显示全部楼层
147258 发表于 2021-10-14 22:59
老哥,在407上用dwt是不是需要硬复位才能计数,我得debug是正常的,然后下载完就不运行,按下复位键才运行 ...

遇到和你一样的问题,不知道阁下找到解决办法没,现在每次烧录完程序必须重启才行,有些麻烦
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2022-8-30 00:38:54 | 显示全部楼层
LeslieChia 发表于 2022-8-29 17:05
遇到和你一样的问题,不知道阁下找到解决办法没,现在每次烧录完程序必须重启才行,有些麻烦

这种的,一般是你下载器的问题,没有正常复位芯片。
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
发表于 2022-9-2 13:54:38 | 显示全部楼层
eric2013 发表于 2022-8-30 00:38
这种的,一般是你下载器的问题,没有正常复位芯片。

哇,谢谢偶像回复,是因为D版吗,还是固件版本有要求?我用的JLINK,裸机是可以下载完自动复位的,但是用DWT就没办法自动复位,准确的说它也复位了,但是好像DWT没启动起来,程序会卡死在延时函数那里
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2022-9-3 09:17:23 | 显示全部楼层
LeslieChia 发表于 2022-9-2 13:54
哇,谢谢偶像回复,是因为D版吗,还是固件版本有要求?我用的JLINK,裸机是可以下载完自动复位的,但是用 ...

自从换上我们H7-TOOL的高速DAPLINK后,再也没有遇到这种坑了。
回复

使用道具 举报

75

主题

684

回帖

909

积分

金牌会员

积分
909
发表于 2022-10-14 10:50:56 | 显示全部楼层
LeslieChia 发表于 2022-8-29 17:05
遇到和你一样的问题,不知道阁下找到解决办法没,现在每次烧录完程序必须重启才行,有些麻烦

我在F1上面遇到过,解决方案。上电延时100ms以上在初始化DWT使用。应该内核复位需要时间,导致DWT一直在跑。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 18:17 , Processed in 0.229882 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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