你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32F767 使用DWT一点问题

[复制链接]
xieyuanfu 提问时间:2018-5-29 11:54 /
tm32F767 使用DWT 来设计延时函数  ,程序如下 初始化  ,但是 我只有在使用jlink调试器的时候  才起作用。 关机 ,拿掉jlink 重新启动的话 ,dwt不计数 了 。就是说 才调试情况下 ,这dwt才工作 。(这个程序在M4内核的429上运行时正常的)我怀疑过M4
内核可能和M7内核的寄存器位置不一样  ,查了 头文件,还有  ARMV7-M Architecture Reference Manual。 看寄存器的地址什么的都是一样的。
但是就是不行  这个在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)

//  dwt 初始化函数
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;
}// 延时函数
void bsp_DWT_DelayUS(uint32_t _ulDelayTime)
{
    uint32_t tCnt, tDelayCnt;
        uint32_t tStart;
               
        tStart = DWT_CYCCNT;                                    
        tCnt = 0;
        tDelayCnt = _ulDelayTime * (SystemCoreClock / 1000000);                             

        while(tCnt < tDelayCnt)
        {
                tCnt = DWT_CYCCNT - tStart;        
        }
}


收藏 4 评论5 发布时间:2018-5-29 11:54

举报

5个回答
wolfgang2015 回答时间:2018-6-29 10:54:15
本帖最后由 wolfgang2015 于 2018-6-29 10:55 编辑

    a.先使能DWT外设,由内核调试寄存器DEM_CR的位24控制,写1使能。
    b.使能CYCCNT寄存器之前,先清0。
    c.使能CYCCNT寄存器,由DWT_CTRL的位0控制,写1使能。

1、看看相关RCC是否初始化。
2、先看看能否正常Get ,代码如下,跟你的代码区别在 uint32_t 和 volatile unsigned int 定义上。看看是否为类型定义的差别。
  1. //寄存器基地址
  2. #define    DWT_CR    *(uint32_t*)0xE0001000
  3. #define    DWT_CYCCNT    *(uint32_t*)0xE0001004
  4. #define    DEM_CR    *(uint32_t*)0xE000EDFC

  5. //定义需使能位
  6. #define    DEM_CR_TRCENA    (1<<24)
  7. #define    DWT_CR_CYCCNTENA    (1<<0)

  8. //DWT init
  9. void DWT_init(void)
  10. {
  11.     DEM_CR |= (uint32_t)DEM_CR_TRCENA;
  12.     DWT_CYCCNT = (uint32_t)0u;
  13.     DWT_CR |= (uint32_t)DWT_CR_CYCCNTENA;
  14. }
  15. //get DWT count
  16. uint32_t DWT_TS_GET(void)
  17. {
  18.     return((uint32_t)DWT_CYCCNT);
  19. }
复制代码

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

50031185 回答时间:2018-6-30 23:01:20
调试和 离线运行 明显的的区别就是 RCC 初始化部分了,
为啥不用CubeMx 生成一个拿来用呢?

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

misakamm20001 回答时间:2018-9-5 22:04:30
这个问题最后解决了吗  我也碰到了
hpdell 回答时间:2018-9-18 15:16:58
你好,请问在 f7 上能够正常运行了吗 ??
hpdell 回答时间:2018-9-19 11:30:04
misakamm20001 发表于 2018-9-5 22:04
这个问题最后解决了吗  我也碰到了

你好,请问你的解决了没有啊 ?

我也遇到同样的问题了

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版