要计算函数之间的耗时,可以使用定时器来测量函数的执行时间。

以下是一个示例代码,演示如何使用定时器来测量两个函数之间的耗时:

#include "stm32f10x.h"

volatile uint32_t start_time, end_time;

void TIM2_IRQHandler(void)
{
    if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
    {
        TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
        end_time = TIM_GetCounter(TIM2);
    }
}

void delay_us(uint32_t us)
{
    start_time = 0;
    end_time = 0;

    TIM_Cmd(TIM2, ENABLE);
    TIM_SetCounter(TIM2, 0);
    while (end_time < us)
    {
        if (start_time == 0)
        {
            start_time = TIM_GetCounter(TIM2);
        }
    }
    TIM_Cmd(TIM2, DISABLE);
}

void function1(void)
{
    // 在这里编写函数1的代码
    delay_us(1000); // 测试函数1的执行时间
}

void function2(void)
{
    // 在这里编写函数2的代码
    delay_us(2000); // 测试函数2的执行时间
}

int main(void)
{
    // 初始化定时器2
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    TIM_TimeBaseStructure.TIM_Prescaler = (SystemCoreClock / 1000000) - 1; // 设置定时器时钟频率为1MHz
    TIM_TimeBaseStructure.TIM_Period = UINT32_MAX;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);

    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    while (1)
    {
        function1();
        function2();
    }
}

在上面的代码中,我们使用定时器2来测量微秒级的时间。在delay_us函数中,我们使用TIM_GetCounter函数来获取定时器的计数值,从而得到经过的时间。在function1function2中,我们分别调用了delay_us函数来测量函数的执行时间。

注意,在使用定时器测量时间时,要确保定时器的时钟频率足够高,以确保测量的精度。在上面的代码中,我们将定时器的时钟频率设置为1MHz,可以根据实际需求进行调整。

STM32F103C8T6 函数执行时间测量:使用定时器实现精确计时

原文地址: https://www.cveoy.top/t/topic/fNp3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录