STM32 利用定时器来计程序运行时间

在单片机的调试过程中,我们经常需要知道某个过程跑一遍的时长,以便更好地对时序进行控制。事实上,利用单片机自带的定时器就能很方便地实现这一功能。

void TIM4_Int_Init(void)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); 
	
    TIM_TimeBaseInitStructure.TIM_Period = 1000000; 
	TIM_TimeBaseInitStructure.TIM_Prescaler=83;  
	TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; 
	TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; 
	
	TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);
	

	
}

void Clock_Start(){
	TIM4->CNT=0x00;
	TIM_Cmd(TIM4,ENABLE);
}

u32 Clock_End(){
	u32 result;
	result = TIM4->CNT;
	TIM_Cmd(TIM4,DISABLE);
	return result;
}
void TIM4_Int_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); TIM_TimeBaseInitStructure.TIM_Period = 1000000; TIM_TimeBaseInitStructure.TIM_Prescaler=83; TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure); } void Clock_Start(){ TIM4->CNT=0x00; TIM_Cmd(TIM4,ENABLE); } u32 Clock_End(){ u32 result; result = TIM4->CNT; TIM_Cmd(TIM4,DISABLE); return result; }
这样,在我们需要计算时长的代码片前启动计时器,在代码片结束的位置关闭计时器,输出结果或对计时结果进行判断即可。 这样,在我们需要计算时长的代码片前启动计时器,在代码片结束的位置关闭计时器,输出结果或对计时结果进行判断即可。
经验分享 程序员 微信小程序 职场和发展