打開定時器配置,從模式選擇關閉,時鐘源選擇內部時鐘,使能中斷,記得配置下面的Parameter Setting,就跟之前配庫函數一樣配就行。
配置完Timer去左邊NVIC裏設置下,TIM2中斷使能勾上。
其他LED的GPIO配置和之前一樣PC13,然後選擇用LL庫生成程序(HAL的網上也有很多教程自行百度)。
生成後打開工程,並不是直接編譯就能讓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 */
}