目录

备赛stm32如何实现定时器延时解决定时器中断刚开启就进中断的问题

【备赛】stm32如何实现定时器延时/解决定时器中断刚开启就进中断的问题

问题描述

背景是我想要按键按下之后,开启定时器,此时开始计时,计时5秒后执行操作。

相当于想起到一个延时的作用。

但是问题是,我刚按下就给我操作执行了,这不是我想要的延时效果。

解决方案

在初始化之后,清除中断标志位。

MX_TIM3_Init();
__HAL_TIM_CLEAR_IT(&htim3, TIM_IT_UPDATE);//清除中断标志位

然后在中断回调函数里面写相关的操作就可以了。

记得最后关闭定时器。(如果你只想只执行一次)。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{		
	//TIM3
	if(htim == &htim3)
	{
        //相关的操作
		HAL_TIM_Base_Stop_IT(&htim3);
	}

}

具体应用

比如你想按下按按键之后,开启LED,延时5秒后关闭。

提前设置定时器时间

按键函数
{
    执行操作:
    开启LED
    开启定时器;
}

定时器中断回调函数
{
    关闭LED;
    关闭定时器;
}