STM32 LL库之定时器的使用

STM32 电子创客营 9378次浏览 已收录 0个评论 扫描二维码

    STM32cubeMx用过的小伙伴应该都知道,初始化外设很方便很简单,也减少自己配置外设的错误率。但是有个问题也导致一些伙伴放弃使用cubeMx,就是cube基于的HAL库生成的代码编译出来占用空间大,用起来方便但是出现问题不好查找,还有就是运行效率不够高。所以st又推出了LL库LL库同样可以和stm32cubeMx配合起来。

   最近用到定时器,就把基于LL库如何使用定时器做个总结。我使用的是stm32F031K6的芯片,有的系列st的LL库可能还在更新之中。

   首先就是把自己的stm32CubeMx升级为最新版本,确保已经集成了LL库。

   定时器我用到两个:一个是tim17用来作为计数,10ms产生一次中断。  一个是tim3用来做pwm捕获输入。如下如所示:

   STM32 LL库之定时器的使用

    再看tim17的详细配置:(这个配置和使用HAL库的时候是一样的,记得要使能中断)

STM32 LL库之定时器的使用STM32 LL库之定时器的使用

    再看下tim3的配置,配置通道1作为捕获输入:

    STM32 LL库之定时器的使用STM32 LL库之定时器的使用

这样配置好以后生成代码。LL库就不想HAL库封装的那么好,函数接口也不一样。所以想让定时器运行就需要深入看一下定时器的参考手册部分。

定时器17启动的以及中断函数代码如下:

void user_tim17Init()
{
	LL_TIM_EnableIT_UPDATE(TIM17);
	LL_TIM_EnableCounter(TIM17);
	
}
void user_tim17IRQ()
{
	if(LL_TIM_IsActiveFlag_UPDATE(TIM17))
	{
		LL_TIM_ClearFlag_UPDATE(TIM17);	
	}	
}

定时器3的pwm捕获功能的代码如下:

void user_dht11Init()
{
	LL_TIM_EnableIT_CC1(TIM3);
	LL_TIM_EnableIT_UPDATE(TIM17);
	LL_TIM_ClearFlag_CC1(TIM3);	
	LL_TIM_SetCounter(TIM3,0);
	LL_TIM_CC_EnableChannel(TIM3,LL_TIM_CHANNEL_CH1);	
	LL_TIM_EnableCounter(TIM3);
}
void user_tim3IRQ()
{
	if(LL_TIM_IsActiveFlag_CC1(TIM3))        //捕获到了下降沿
	{			  
	    valueBuf[valueCount] =LL_TIM_OC_GetCompareCH1(TIM3);
            LL_TIM_ClearFlag_CC1(TIM3);			
            valueCount++;  
            LL_TIM_SetCounter(TIM3,0);				
	}
}


转载请注明转自电子创客营:STM32 LL库之定时器的使用! 了解我们点击这里

微信扫一扫关注我们的公众号:eemaker

STM32 LL库之定时器的使用


喜欢 (10)or分享 (0)
电子创客营
关于作者:

您必须 登录 才能发表评论!