最近有用到定时器的输出功能,可以通过这个功能使1个定时器输出4路不同频率的pwm,这里做一下记录,防止以后自己忘记了。
下面直接看初始化:
这里我是使用定时器1通道1,也就是PA8引脚
有了以上操作之后我们生成代码后还必须要手动添加使能代码:
LL_TIM_CC_EnableChannel(TIM1,LL_TIM_CHANNEL_CH1);
LL_TIM_EnableAllOutputs(TIM1);
LL_TIM_EnableIT_CC1(TIM1);
LL_TIM_EnableCounter(TIM1);
最后我们还要添加中断执行函数:
void TIM1_CC_IRQHandler(void)
{
/* USER CODE BEGIN TIM1_CC_IRQn 0 */
if(LL_TIM_IsActiveFlag_CC1(TIM1) == SET)
{
LL_TIM_ClearFlag_CC1(TIM1);
__IO uint16_t count;
/*获取当前计数*/
count=LL_TIM_GetCounter(TIM1);
/*设置比较数值*/
LL_TIM_OC_SetCompareCH1(TIM1, count + 1000);
}
/* USER CODE END TIM1_CC_IRQn 0 */
/* USER CODE BEGIN TIM1_CC_IRQn 1 */
/* USER CODE END TIM1_CC_IRQn 1 */
}
执行的时候寄存器的值:
这里我使能了通道1输出比较和通道1的比较中断,当定时器的计数值和输出比较通道的值相等的时候会进入中断,并且对应的PA8上的引脚电平就会翻转,同时我们在中断里面获取了当前的定时器计数值,然后将这个数值进行累加之后重新放入输出比较寄存器,
在下一次定时器计数值和比较寄存器相等的时候对应的PA8上的引脚电平就又会翻转,从而实现PWM输出。
当然对于高级定时器而言,还需要使能主输出模式LL_TIM_EnableAllOutputs(TIM1);
因为我上面初始化的时候只初始化了通道一,所以只使能了通道1,也只实现了比较通道1的中断函数,如果想4路的话就依次类推就好了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)