在上新建工程的基础上添加使用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
复制代码
编译链接下载到开发板里,测试测试成功
————————————————
转载:Willliam_william
|