STM32L4的TIMER定时器中断

STM32L4的TIMER定时器中断

在上新建工程的基础上添加使用TIMER功能(新建工程见STM32使用LL库建立工程

一、CubeMX的配置

使能定时器6即可
在这里插入图片描述
然后重要的是工程设置里,将HAL改成LL
在这里插入图片描述
然后便可以生成代码
在这里插入图片描述

二、用户代码修改

将TIM6初始化代码修改为如下,放入新建的timer6.c文件

/**
 * @brief	基本定时器6中断初始化函数
 *			定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
 *			Ft=定时器工作频率,单位:Mhz
 *			这里使用的是定时器6!(定时器6挂在APB1上,时钟为HCLK:80Mhz)
 *
 * @param   arr		自动重装值。
 * @param   psc		时钟预分频数
 *
 * @return  void
 */
void TIM6_Int_Init(u16 arr,u16 psc)
{
	LL_TIM_InitTypeDef TIM_InitStruct;

	LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM6);//使能TIM6时钟

	/* TIM6 interrupt Init */
	NVIC_SetPriority(TIM6_DAC_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 3));
	NVIC_EnableIRQ(TIM6_DAC_IRQn);

	TIM_InitStruct.Prescaler = psc;  //定时器分频
	TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP; //向上计数模式
	TIM_InitStruct.Autoreload = arr; 	//自动重装载值
	TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;//时钟分频因子
	LL_TIM_Init(TIM6, &TIM_InitStruct);

	LL_TIM_EnableIT_UPDATE(TIM6);	//允许更新中断
	
	LL_TIM_EnableCounter(TIM6);		//使能定时器6
	
}

然后在定时器中断服务函数里加入LED翻转

//定时器6中断服务函数
void TIM6_DAC_IRQHandler(void)
{
	if(LL_TIM_IsActiveFlag_UPDATE(TIM6)==SET)	//溢出中断
	{
		LED_TogglePin();        //LED翻转
	}
	LL_TIM_ClearFlag_UPDATE(TIM6);	//清除中断标志位 
}

在主函数里将tim6初始化

TIM6_Int_Init(2000,8000 - 1);	//200ms

编译链接下载到开发板里,测试测试成功

发布了62 篇原创文章 · 获赞 13 · 访问量 5572

猜你喜欢

转载自blog.csdn.net/qq_38113006/article/details/104149936