STMCube學習記錄(四) 定時器中斷 LL庫(Timer 2)

打開定時器配置,從模式選擇關閉,時鐘源選擇內部時鐘,使能中斷,記得配置下面的Parameter Setting,就跟之前配庫函數一樣配就行。

在這裏插入圖片描述

配置完Timer去左邊NVIC裏設置下,TIM2中斷使能勾上。
NVIC

其他LED的GPIO配置和之前一樣PC13,然後選擇用LL庫生成程序(HAL的網上也有很多教程自行百度)。
LL庫TIM2
生成後打開工程,並不是直接編譯就能讓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 */
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章