STMCube学习记录(四) 定时器中断 LL库(Timer 2)

打开定时器配置,从模式选择关闭,时钟源选择内部时钟,使能中断,记得配置下面的Parameter Setting,就跟之前配库函数一样配就行。

STMCube学习记录(四) 定时器中断 LL库(Timer 2)_第1张图片

配置完Timer去左边NVIC里设置下,TIM2中断使能勾上。
STMCube学习记录(四) 定时器中断 LL库(Timer 2)_第2张图片

其他LED的GPIO配置和之前一样PC13,然后选择用LL库生成程序(HAL的网上也有很多教程自行百度)。
STMCube学习记录(四) 定时器中断 LL库(Timer 2)_第3张图片
生成后打开工程,并不是直接编译就能让LED闪烁的,打开“stm32f1xx_it.c”找到

void TIM2_IRQHandler(void)

在其中添加

LL_GPIO_TogglePin(GPIOC, LL_GPIO_PIN_13);	//IO反转

编译运行,发现LED并不能亮,百度得知LL库需要给定时器计数使能,于是在主函数初始化下面加上如下代码:

	LL_TIM_EnableIT_UPDATE(TIM2);//TIM2更新使能
	LL_TIM_EnableCounter(TIM2);//TIM2计数使能

再次编译,发现LED亮了,但是不灭,debug是进了中断的,但是只进了一次,经过冷静分析,是中断标志位没有清。把中断服务函数改成如下:

void TIM2_IRQHandler(void)
{
  /* USER CODE BEGIN TIM2_IRQn 0 */
	if(LL_TIM_IsActiveFlag_UPDATE(TIM2))
	{
		LL_GPIO_TogglePin(GPIOC, LL_GPIO_PIN_13);		
	}
	LL_TIM_ClearFlag_UPDATE(TIM2);
  /* USER CODE END TIM2_IRQn 0 */
  /* USER CODE BEGIN TIM2_IRQn 1 */

  /* USER CODE END TIM2_IRQn 1 */
}

再编译烧录,正常了。

总结:
1.使用LL库要在初始化加

	LL_TIM_EnableIT_UPDATE(TIM2);//TIM2更新使能
	LL_TIM_EnableCounter(TIM2);//TIM2计数使能

2.服务函数里要记得清标志位,原来例程都清了也都习以为常了,自己写的时候不能忘记。

void TIM2_IRQHandler(void)
{
  /* USER CODE BEGIN TIM2_IRQn 0 */
	if(LL_TIM_IsActiveFlag_UPDATE(TIM2))
	{
		//add your code here...	
	}
	LL_TIM_ClearFlag_UPDATE(TIM2);
  /* USER CODE END TIM2_IRQn 0 */
  /* USER CODE BEGIN TIM2_IRQn 1 */

  /* USER CODE END TIM2_IRQn 1 */
}

你可能感兴趣的:(stm32,stmcube,STM32F401)