2017-02-15 84 views
1

我想測量單個函數在STM32上花費多長時間。我唯一能找到的就是SysTick_Handler。然而,這是一個週期性的中斷,但我需要的是得到這樣的時間間隔:如何在STM32上獲取時間間隔?

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

我試過çclock(),但它沒有工作,總是返回-1。我怎麼做到的?

+0

增加'SysTick_Handler'中的變量並查詢該變量。 –

+0

@BenceKaulics是唯一的解決方案嗎?這似乎是一種解決方法。 –

+0

您必須以任一方式設置一個計時器並記錄它。最簡單的使用sys tick和一個簡單的變量。 ST的官方HAL庫也採用相同的方式,例如:[stm32F0xx_hal.c](https://github.com/wemos/Motor_Shield_Firmware/blob/master/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c) –

回答

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

+0

非常有用的答案。 ;-) –

相關問題