如何在stm32f3xx中找到执行时间?

时间:2018-02-21 10:25:58

标签: c time embedded stm32 execution

#include "main.h"
#include "stm32f3xx_hal.h"
#include<time.h>

TIM_HandleTypeDef htim2
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_TIM2_Init(void);
long int count1,count2,count,i=5;


int main(void)
{
    HAL_Init();

    SystemClock_Config();

    MX_GPIO_Init();
    MX_TIM2_Init();
    HAL_TIM_Base_Init(&htim2);
    HAL_TIM_Base_Start(&htim2);

    count1= __HAL_TIM_GET_COUNTER(&htim2);

    while (i)
    {
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,GPIO_PIN_SET);
        HAL_Delay(50000);
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,GPIO_PIN_RESET);
        HAL_Delay(10000);       
        i--;
    } 
    count=count2-count1;
    count2= __HAL_TIM_GET_COUNTER(&htim2);
}

代码输出始终为0.我无法获取计数值。任何人都可以告诉我为什么它没有执行?我正在使用STM32F303k8微控制器。计数值始终为零,即使完全执行也需要几分钟!!

提前致谢!

2 个答案:

答案 0 :(得分:1)

此:

count=count2-count1;
count2= __HAL_TIM_GET_COUNTER(&htim2);

没有任何意义,你在从计时器刷新之前从count2中减去它?

或许应该是:

const uint32_t now = __HAL_TIM_GET_COUNTER(&htim2);
count += now - last;
last = now;

在循环之前使用uint32_t last = __HAL_TIM_GET_COUNTER(&htim2);

答案 1 :(得分:1)

较新的ARM Cortex-M3 / 4/7器件提供了一个名为CYCLECOUNTER的寄存器,即使不使用任何额外的定时器/计数器,也无需在代码中添加任何检测,即可在调试器中对其进行检查。例如,在IAR AppNote“如何使用CYCLECOUNTER测量执行时间”中描述了该技术:

https://www.iar.com/support/resources/articles/how-to-measure-execution-time-with-cyclecounter/