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; } } |
a.先使能DWT外设,由内核调试寄存器DEM_CR的位24控制,写1使能。
b.使能CYCCNT寄存器之前,先清0。
c.使能CYCCNT寄存器,由DWT_CTRL的位0控制,写1使能。
1、看看相关RCC是否初始化。
2、先看看能否正常Get ,代码如下,跟你的代码区别在 uint32_t 和 volatile unsigned int 定义上。看看是否为类型定义的差别。
评分
查看全部评分
为啥不用CubeMx 生成一个拿来用呢?
评分
查看全部评分
你好,请问你的解决了没有啊 ?
我也遇到同样的问题了