Ⅰ、概述

本文在前面文章“STM32基本的计数原理”的基础上进行拓展,讲述关于“定时器输入捕获”的功能,和上一篇文章“定时器比较输出”区别还是挺大的。在引脚上刚好相反:一个输入、一个输出。

本文只使用一个TIM5通道3(也可其他通道)捕获输入脉冲的频率,通过捕获两次输入脉冲的间隔时间来计算脉冲波形的频率。间隔一定时间读取频率并通过串口打印出来。

当然也可通过两路通道捕获脉冲信号的占空比,计划后期整理。

笔者通过信号发生器产生信号,上位机串口助手显示捕获的脉冲频率。(没有信号发生器的朋友可以结合上一篇文章PWM输出做信号源:在同一块板子上也可以使用不同定时器,将输出引脚接在输入引脚)

先看一下实例的实验现象

关于本文的更多详情请往下看。

Ⅱ、实例工程下载

笔者针对于初学者提供的例程都是去掉了许多不必要的功能,精简了官方的代码,对初学者一看就明白,以简单明了的工程供大家学习。

笔者提供的实例工程都是在板子上经过多次测试并没有问题才上传至360云盘,欢迎下载测试、参照学习。

提供下载的软件工程是STM32F417的,但F4其他型号也适用(适用F4其他型号: 关注微信,回复“修改型号”)。

STM32F4_TIM输入波形捕获(脉冲频率)实例:

https://yunpan.cn/cB6XrSi6rK3TP  访问密码

STM32F4资料:

https://yunpan.cn/cR2pxqF5x2d9c  访问密码 53e7

Ⅲ、原理描述

笔者将TIM分为三大块:时基部分、比较输出和输入捕获,请看下面截图“通用TIM框图”。

前面的文章已经将“时基部分”的一些基础知识讲述过了,“时基部分”的功能是比较有用的,它除了可以用来延时(定时)之外,它还可以拿来触发其他一些功能,如:触发DA转换、AD采集等。

上一篇文章讲述的就是图中比较输出部分,比较输出部分功能相对比较简单。

该文主要讲述“输入捕获”部分,这部分输入的通道1与2、通道3与4可以相互协作。该文只使用了TIM5的通道3,捕获输入信号频率。

通用TIM框图:

上面两图截取“STM32F4x5、x7参考手册”建议下载手册参看。

Ⅳ、源代码分析

笔者以F4标准外设库(同时也建议初学者使用官方的标准外设库)为基础建立的工程,主要以库的方式来讲述。

1.RCC时钟

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

本文提供的例程也可以使用TIM2(只要将例程源代码中使用到的TIM5改为TIM2,以及引脚改正过来就行)。

重点注意:

A.外设RCC时钟的配置要在其外设初始化的前面;

B.匹配对应时钟。

比如:RCC_APB2外设不要配置在RCC_APB1时钟里面

【如:RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);这样能编译通过,但这是错误的代码】

2.TIM输入捕获引脚配置

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

点:

A.引脚与通道对应:这个需要参看“数据手册”,该文TIM5通道3对应的引脚就是PA2.

B.复用配置:GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_TIM5);

这个地方对于F1转F0、F4等的朋友需要注意,更加芯片系列及库的不同,他们之间存在一定的差异。

3. TIM输入捕获配置

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

“时基部分”是在前面两篇文章讲述过的,这里主要对“输入捕获”部分理解,主要5个参数:

捕获通道:就是我们捕获的通道;

捕获极性:就是我们捕获脉冲的高还是低电平;

捕获选择:是直接捕获该通道,还是上面说的1,2通道协助捕获;

捕获分频:对捕获的脉冲分频;

捕获滤波:过滤掉波形;

4. NVIC配置

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

这里不用多说,只是提醒大家不要忘记配置这里。

5. 计算捕获波形频率原理

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

该函数是中断函数,也是计算频率重要的函数;

A.两次捕获值

捕获配置中,捕获的极性是高电平,这里就是在“上升沿”中断(捕获),如果配置为“下降沿”,则是在信号的下降沿中断。

B.计算两次捕获差值

这里常人理解都是: capture = (capture_value2 - capture_value1);

但是,需要考虑另外两种情况,就是计数器在计满和相等时候。

C.计算频率

这里可以理解为:1秒钟计了多少个数。

但是需要注意的是截图中“/2”,对系统时钟除2,原因在于RCC给TIM提供的时钟就是除了2的,所以,这个地方需要/2.

Ⅴ、说明

关于笔者提供的软件工程实例,可关注微信,在会话框回复“关于工程”,有关于工程结构描述、型号修改等讲述。

以上总结仅供参考,若有不对之处,敬请谅解。

、最后

更多精彩文章我讲第一时间在微信公众号里面分享。

本着免费分享的原则,方便大家手机学习知识,定期在微信平台分享技术知识。如果你觉得分享的内容对你有用,又想了解更多相关的文章,请用微信搜索“EmbeddDeveloper” 或者扫描下面二维码、关注,将有更多精彩内容等着你。

STM32F4_TIM输入波形捕获(脉冲频率)的更多相关文章

  1. STM32F4_TIM输入波形捕获(脉冲频率、占空比)

    推荐 分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来! http://www.captainbed.net/strongerhuang Ⅰ.概述 ...

  2. hal 编码器做用户输入时捕获初值的设置

    uint16_t encoderDirection = __HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3); uint16_t encoderValue = __HA ...

  3. Windows PCM音频捕获与播放实现

    在WINDOWS下,音频函数有多种类型,如MCI.多媒体OLE控制.高级音频等,使用方法都比较简单.但如果想编写一个功能较强大的音频处理程序,那就必须使用低级音频函数和多媒体文件I/O来控制音频设备的 ...

  4. 基于STM32F429和Cube的主从定时器多通道输出固定个数的PWM波形

    主从定时器的原理已在上篇博文: 基于STM32F429+HAL库编写的定时器主从门控模式级联输出固定个数PWM脉冲的程序 讲解了,这篇重点就讲如何实现多通道的PWM级联输出. 1.软件环境 Keil5 ...

  5. 基于SincNet的原始波形说话人识别

    speaker recognition from raw waveform with SincNet Mirco Ravanelli, Yoshua Bengio 作为一种可行的替代i-vector的 ...

  6. 使用Graph工具观察FFT波形

    2014年8月1日,经过很长时间的上网查阅资料,走了很多弯路,终于可以成功使用Graph工具仿真波形了,虽然这个的确很简单,但是经过自己摸索出来的,兴奋之情难于言表. 明天就是七夕了,刚和女朋友分手的 ...

  7. [转]RTH试用手记之“偶发信号观测”

    年初,罗德与施瓦茨公司(Rohde & Schwarz)推出了第一款的手持示波器,从指标上看,该示波器打破了传统手持器功能简单.指标水平低.结构粗糙的印象,取而代之达到了主流台式数字示波器的性 ...

  8. Image Processing and Analysis_8_Edge Detection:Finding Edges and Lines in Images by Canny——1983

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...

  9. 论文翻译:2020_WaveCRN: An efficient convolutional recurrent neural network for end-to-end speech enhancement

    论文地址:用于端到端语音增强的卷积递归神经网络 论文代码:https://github.com/aleXiehta/WaveCRN 引用格式:Hsieh T A, Wang H M, Lu X, et ...

随机推荐

  1. struts2+hibernate+poi导出Excel实例

    本实例通过struts2+hibernate+poi实现导出数据导入到Excel的功能 用到的jar包: poi 下载地址:http://poi.apache.org/ 根据查询条件的选择显示相应数据 ...

  2. Java基础知识:序列化和反序列化

    一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存 ...

  3. Windows消息初探(1)

    Windows消息初探(1) 最近恢复对Windows API的学习,深深感受到没有对应的中文资料的痛苦,于是上MSDN上面去将Windows消息搞了一些回来翻译出来,供自己查阅,也与大家分享,能力有 ...

  4. 解决:对 PInvoke 函数的调用导致堆栈不对称问题 <转载>

    问题描述: 在使用托管代码调用非托管代码时,发生“对 PInvoke 函数“UseTwiHikVisionDllTest!UseTwiHikVisionDllTest.TwiHikVision::Ge ...

  5. Android开发-API指南-Content Provider

    Content Providers 英文原文:http://developer.android.com/guide/topics/providers/content-providers.html 采集 ...

  6. Openstack-Mitaka Ceilometer 中使用 SNMP 监控真实物理机

    Ceilometer 是 Openstack 的监控管理计费模块,我所用的版本为 Mitaka 版本.在 Ceilometer 中,可以使用 SNMP 监控服务器的实时硬件资源信息. 系统环境为 Ce ...

  7. 用Ossim管理IT资产(视频)

    用Ossim管理IT资产 在Ossim中集成了Ocs Server,OCS用于帮助网络或系统管理员来跟踪网络中计算机配置与软件安装情况的应用程序.收集到硬件和系统信息,OCS Inventory 也可 ...

  8. ajax contenttype

    jquery ajax基本形式: $.ajax({ type: 'POST/get', url: '', data: {"n":n,"m":m}, dataTy ...

  9. excel快速复制大量公式的方法

    excel中快速复制公式的方法有很多,适合复制大量公式的方法有两个,一个是拖动该单元格右下角,向下拖动即可快速填充下面的单元格,实现公式的快速复制.这种方法适合数据量不大的时候使用,如果数据很多,有2 ...

  10. 【MySQL】删除大表的讨论【转】

    转自http://tech.ddvip.com/2013-07/1373269453198566.html 微博上讨论MySQL在删除大表engine=innodb(30G+)时,如何减少MySQL ...