0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32F0xx_TIM输入捕获(计算频率) 配置详细过程

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-04-07 10:57 次阅读

前言

关于STM32定时器,可谓是功能强大,估计没有多少人研究完STM32定时器的所有功能(包括我也没有),只是使用常用的一些功能,后续我会推出关于STM32定时器的更多功能。

STM32芯片多数为16位计数,但基本上都有1个或两个32位的定时器,可惜的是我们最常使用的F1系列芯片中没有32位的定时器,F030中也没有,具体请看数据手册。

今天主要总结关于STM32F0系列输入捕获,捕获信号频率,即所谓逻辑分析仪检测数字频率的功能。

今天使用32位的TIM2作为捕获的定时器,为什么是32位,原因很简单,就是为了捕获(采集)更宽频率的波形,今天提供的工程可以采集0Hz - 10MHz的波形(建议2MHz一下,串口打印需要时间)。而16位就不行,提醒使用F1的朋友要注意这一点。官方提供的例程也是16位,检测的范围同样有限。

下载

ST标准外设库和参考手册、数据手册等都可以在ST官网下载,你也可以到我的360云盘下载。关于F0系列芯片的参考手册有多个版本(针对F0不同芯片),但有一个通用版本,就是“STM32F0x128参考手册V8(英文)2015-07”建议参考该手册,以后如果你换用一种型号芯片也方便了解。

今天的软件工程下载地址(360云盘):

https://yunpan.cn/cSztEbetLczKY访问密码 06d0

STM32F0xx的资料可以在我360云盘下载:

https://yunpan.cn/cS2PVuHn6X2Bj访问密码 8c37

今天工程测试效果(视频):

https://yunpan.cn/cSziVGGZbMagj访问密码 5731

准备工作

今天总结的软件工程是基于“TIM基本延时配置详细过程”修改而来,因此需要将该软件工程下载准备好。今天将源代码添加在timer.c文件里面,就不需要新建文件了。

捕获原理

看系统框图,今天使用分频的方式来采集波形,官方提供的例程是没有配置TimeBase参数,也没有分频,分频的好处在于不是非常实时的获取波形,这样有利于提供精度(可以说是计算平均值)。捕获外部8个脉冲,前后读取一下计数的值,这个值就是外部脉冲的差值,从而计算出频率。


配置过程详情

①RCC时钟


该函数位于bsp.c文件下面;

我个人习惯第一步配置时钟,ST官方提供的例程也是把配置时钟放在前面。关于RCC时钟的配置比较重要,有好几次我就是由于忘记配置相应RCC时钟,让我找了很久的问题,最后才发现是RCC时钟没有配置。

注意:

外设时钟不要随便添加,比如:RCC_APB1外设不要配置在RCC_APB2时钟里面【如:RCC_APB2PeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);这样能编译过,但是错误的】

我每次都提醒RCC时钟,是因为很多人就是因为时钟而导致软件运行有问题,所以,提醒更多人要注意配置RCC.

②捕获引脚配置


该函数位于timer.c文件下面;

重点注意:

引脚配置要和对应通道匹配才行(请看数据手册中的引脚说明)。

复用功能同样也是需要配置。

③TIM捕获配置

该函数位于timer.c文件下面;

这里的分频值配置为一样,方便计算。

④捕获频率的计算


该函数位于stm32f0xx_it.c文件下面;

这个函数就是捕获中断函数,采集8个脉冲的前后中断一次,即读取一下计数值,通过计数值的差就可以算出频率了。

说明

STM32F0的芯片软件兼容性很好,可以适用于F0其他很多型号的芯片(具体请看手册、或者亲自测试)。

今天的工程是基于工程“STM32F0xx_TIM基本延时配置详细过程”修改而来,以上实例总结仅供参考,若有不对之处,敬请谅解。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Tim
    Tim
    +关注

    关注

    0

    文章

    81

    浏览量

    17875
  • 信号捕获
    +关注

    关注

    0

    文章

    6

    浏览量

    8641
  • STM32F0
    +关注

    关注

    0

    文章

    61

    浏览量

    17088
收藏 人收藏

    评论

    相关推荐

    使用STM32F1输入捕获功能时,TIM6和TIM7无法实现输入捕获是哪里的问题?

    使用STM32F1输入捕获功能时,TIM6和TIM7无法实现输入
    发表于 09-27 09:11

    STM32的一个芯片测PWM输入频率有的时候不对是什么原因造成的?

    2个,即使__HAL_TIM_GetCounter放到前面。 我用的是TIM10和TIM13分别做两路PWM输入捕获,每个定时器都是先测上升
    发表于 09-27 08:21

    STM32CUBEMX(5)--自定义红外NEC解码,定时器TIM捕获方式

    芯片型号 配置时钟源 HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用内置的时钟源,故都选择Disable选项,如下所示: 配置时钟树 STM32F0的最高主频到48M,所以配置
    发表于 09-05 16:19

    TIM捕获TC399 KIT的TOM输出,为什么?

    我正在使用该 KIT [TC399],并尝试使用该示例 GTM_TIM_Capture_1_KIT_TC397_TFT 在 TIM捕获 TOM 输出,并计算
    发表于 07-23 06:36

    STM32F723ZET6定时器输入捕获通道的GPIO不能上拉怎么解决?

    我在使用STM32F723ZET6的TIM捕获外部的信号上升沿,发现外部的信号经过电路元件后到达捕获通道引脚后,幅值变得很小,不能被STM32
    发表于 05-21 07:12

    STM8使用了TIM1_PWMIConfig配置捕获PWM输入,进入不了中断是怎么回事?

    使用了TIM1_PWMIConfig配置捕获PWM输入输入管脚有信号,但是进入不了中断。使用普通的
    发表于 05-14 06:49

    stm32f103 PWM捕获TIM_GetCapture1没有数据是怎么回事?

    我用TIM2输入捕获TIM3进行pwm输出,但是进入中断后TIM_GetCapture1接受到的数据为零 贴上我的驱动代码,希望有其他调
    发表于 05-07 06:33

    STM8L TIM2提高频率就不能捕获,为什么?

    TIM2 捕获频率低的时候还可以,能捕获正确,如果提高频率(大概4KHZ)就不可以了,在加大频率
    发表于 04-29 06:50

    STM32F103的TIM14输入捕获极性CC1P可设置为双沿吗?

    STM32F103手册中介绍,TIM14输入捕获极性CC1P(bit1-2)可设置为11,为双沿捕获,但是手册又描述了bit2为保留,哪些芯
    发表于 04-03 06:50

    STM32G030C8T6 TIM16 CH1输入捕获值怎么是递增的呢?

    _CLOCKDIVISION_DIV1; TIM_InitStruct.RepetitionCounter= 0; LL_TIM_Init(TIM16,
    发表于 03-29 07:24

    在利用“通用定时器”捕获PWM信号的过程中,中断服务函数是设置为如下的哪一种模式呢?

    ); IC2Value = TIM_GetCapture2(GENERAL_TIM); // 注意:捕获寄存器CCR1和CCR2的值在计算占空比和
    发表于 03-22 07:55

    在使用一个定时器捕获两路PWM的频率时,中断函数应该如何配置呢?

    上升沿中断,计数器会被复位,锁存到CCR1寄存器的值是0,CCR2寄存器的值也是0 * 无法计算频率和占空比。当第二次上升沿到来的时候,CCR1和CCR2
    发表于 03-22 06:39

    STM32F103VE搭建的PWM输入捕获功能,移植到STM32F103VD无法捕获的原因?

    利用STM32F103VE芯片搭建的PWM输入捕获功能,移植到STM32F103VD的时候,无法捕获。主要存在的问题:进入不了中断服务函数(
    发表于 03-20 08:21

    STM32F723ZET6定时器输入捕获通道的GPIO不能上拉的原因?

    我在使用STM32F723ZET6的TIM捕获外部的信号上升沿,发现外部的信号经过电路元件后到达捕获通道引脚后,幅值变得很小,不能被STM32
    发表于 03-07 07:28

    基于CKS32F4xx系列的MCU互补PWM方案

    互补输出实际跟比较输出章节一样使用的是定时器的功能,所以相关的函数设置同样在库函数文件CKS32f4xx_tim.h和CKS32f4xx_tim.c文件中。 1)开启TIM1和GPIO时钟,
    发表于 12-02 10:13 588次阅读
    基于CKS32<b class='flag-5'>F4xx</b>系列的MCU互补PWM方案