hal库开启中断关中断_STM32 LL库之定时器的使用

本文介绍了如何在STM32CubeMX中使用LL库配置定时器,包括TIM17作为计数器实现10ms中断和TIM3作为PWM捕获输入。内容涉及LL库的更新、定时器配置、中断使能以及启动和捕获功能的代码实现。
摘要由CSDN通过智能技术生成

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

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

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

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

774c956b1137a24c66004cd6d6637c83.png

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

188f99967dae9bd5aab6901192bedf62.png
312169bef7708e7372d5e2055848a5c9.png

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

ec059dd5e70910ec79d5fbaf486ac31f.png
819493a0200233a8a20acd8923381d81.png

这样配置好以后生成代码。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);}}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值