Time 如何在STM32上获取时间间隔?

Time 如何在STM32上获取时间间隔?,time,stm32,microprocessors,Time,Stm32,Microprocessors,我想测量一个函数在STM32上需要多长时间。我唯一能找到的是SysTick\u Handler。但是,这是一个周期性中断,但我需要的是获取时间间隔,如: long t1 = mcu_clock(); sleep(20); long t2 = mcu_clock(); long diff = (t2 - t1); 我尝试了Cclock(),但它不起作用,总是返回-1。如何设置?首先,在启动时启用循环计数器一次: CoreDebug->DEMCR |= CoreDebug_DEMCR_TRC

我想测量一个函数在STM32上需要多长时间。我唯一能找到的是
SysTick\u Handler
。但是,这是一个周期性中断,但我需要的是获取时间间隔,如:

long t1 = mcu_clock();
sleep(20);
long t2 = mcu_clock();
long diff = (t2 - t1);

我尝试了C
clock()
,但它不起作用,总是返回
-1
。如何设置?

首先,在启动时启用循环计数器一次:

CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CYCCNT = 0;
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
然后,您可以访问其值:

unsigned long t1 = DWT->CYCCNT;
/* do something */
unsigned long t2 = DWT->CYCCNT;
unsigned long diff = t2 - t1;
它计算经过的cpu周期,您必须将其与cpu时钟频率相除,以秒为单位获得一个值


由于它是一个32位的值,它可以在更高的时钟频率下非常快地溢出,例如在216 MHz下的19.88秒内。

如果您有可用的HAL,请尝试

int millis = HAL_GetTick();

SysTick\u处理程序中增加一个变量,并查询该变量。@BenceKaulics这是唯一的解决方案吗?这似乎是一个解决办法。你必须以任何一种方式设置计时器并跟踪它。最容易使用的是sys tick和一个简单变量。ST的官方HAL库也采用同样的方法,例如:非常有用的答案。;-)