gpt4 book ai didi

c - STM32 - 如何启用 DWT 循环计数器

转载 作者:太空狗 更新时间:2023-10-29 16:47:39 24 4
gpt4 key购买 nike

我使用的是 STM32F7-Discovery 开发板,一直试图启用 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;

目前,我得到的唯一方法是在 Visual Studios(使用 VisualGDB)中单步执行调试器时,如果我将 DWT->CTRL 的值更改为 ON 值,则循环计数器开始。但除此之外,我似乎无法获得更改代码的值(value)。

编辑:是什么导致了这些代码行没有执行它们的任务但也没有崩溃和继续的行为。

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

下图是运行时发生的情况的示例。

之前: Before

之后: After

最佳答案

可能缺少解锁 dbg regs (DWT->LAR = 0xC5ACCE55):下面的序列为我解决了 pb :

      CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->LAR = 0xC5ACCE55;
DWT->CYCCNT = 0;
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;

关于c - STM32 - 如何启用 DWT 循环计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36378280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com