一、通用计时方法

在使用STM32时,有时我们需要测试代码运行的时间,或者需要计时,有个最简单的办法是调用HAL库提供HAL_GetTick,这个函数可以获取ms的计数值,每ms计数一次。

使用办法如下:

uint32_t tickstart = HAL_GetTick();
// 需要测试耗时的代码
// ...
// 获取消耗的时间,ms
uint32_t times = HAL_GetTick() - tickstart;

二、us计时方法

但是当我们需要计算us时,发现HAL库并没有提供类似的函数,我们只有自己写:

uint32_t GetMicros(void) {
	uint32_t m = HAL_GetTick();
	uint32_t tms = SysTick->LOAD + 1;
	uint32_t u = tms - SysTick->VAL;

	if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) != 0) {
		m = HAL_GetTick();
		u = tms - SysTick->VAL;
	}
	return (m * 1000 + (u * 1000) / tms);
}

 使用方法同上:

uint32_t tickstart = GetMicros();
// 需要测试耗时的代码
// ...
// 获取消耗的时间,us
uint32_t times = GetMicros() - tickstart;

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐