time - STM32如何获取时间间隔?

标签 time stm32 microprocessors

我想测量单个函数在STM32上需要多长时间。我唯一能找到的是 SysTick_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 秒。

关于time - STM32如何获取时间间隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42246125/

相关文章:

specifications - 如何确定光流所需的处理器速度?

android - 获取Android系统开机时间的方法

go - 如何在 golang 的日期上加 1 秒?

integer - 8 位、16 位、32 位处理器/微 Controller 中整数的大小是多少?

embedded - 如何构建像 Raspberry Pi 这样的单板计算机来运行 OS?

stm32 - 如何使用带 PLL 的 HSE 将 RTC 时钟与 STM32 一起使用

java - 在java中显示基于时间的早上,下午,晚上,晚上消息

c++ - 乱七八糟的是ctime、time.h、sys/time.h

stm32定时器: starts and resets on same trigger

embedded - 什么是模拟看门狗?