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

时间:2017-02-15 10:02:06

标签: time stm32 microprocessors

我想测量一个函数对STM32的持续时间。我唯一能找到的是SysTick_Handler。但是,这是一个周期性的中断,但我需要的是获取时间间隔,如:

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

我已经尝试了C clock(),但它没有工作并始终返回-1。我该怎么做?

2 个答案:

答案 0 :(得分:5)

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

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秒。

答案 1 :(得分:1)

如果您可以使用HAL,请尝试;

int millis = HAL_GetTick();