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

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个回答
wolfgang 回答时间: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

查看全部评分

KEY1 回答时间: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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版