我正在使用STM32F7-Discoveryboard,并且一直在尝试启用DWT循环计数器。从我在网上看到的情况来看,这应该足以启用它:
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CYCCNT = 0;
DWT->CTRL |= 1;但是,每当我运行该代码时,都不会更改值或跳过操作(我不太确定发生了什么)。
我试着做指向内存中地址的指针,并直接修改它们,但也没有效果。例如:
volatile uint32_t *DWT_CONTROL = (uint32_t *) 0xE0001000;
volatile uint32_t *DWT_CYCCNT = (uint32_t *) 0xE0001004;
volatile uint32_t *DEMCR = (uint32_t *) 0xE000EDFC;
*DEMCR = *DEMCR | 0x01000000;
*DWT_CYCCNT = 0;
*DWT_CONTROL = *DWT_CONTROL | 1;目前,如果我将DWT->CTRL的值更改为循环计数器开始的ON值,那么在VisualGDB中(使用VisualGDB)中处理调试器时,我得到的唯一方法是。除此之外,我似乎无法在代码中得到可以更改的值。
编辑:是什么导致这些代码行没有执行任务,但也不会崩溃和继续的行为。
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CYCCNT = 0;
DWT->CTRL |= 1;在运行这些代码行之后,这些内存位置上的所有值都保持不变,并且不会随着应该执行的操作而改变。
例如:
//DWT_CTRL_CYCCNTENA_Msk = 1
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk 应该会导致DWT->CTRL的值为0x40000001,但它将保持其默认值0x40000000。
下面的图片是运行时发生的事情的一个例子。
在之前:

在之后:

https://stackoverflow.com/questions/36378280
复制相似问题