#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微控制器。计数值始终为零,即使完全执行也需要几分钟!!
提前致谢!
答案 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/