Ⅰ、概述

本文在前面文章“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. sql 获取filename

    select Substring(ORIGINAL_IMAGE,len(ORIGINAL_IMAGE)-charindex('/',reverse(ORIGINAL_IMAGE))+2,len(ORI ...

  2. The 2013 ACM-ICPC Asia Changsha Regional Contest - A

    Alice's Print Service Time Limit: 2 Seconds      Memory Limit: 65536 KB Alice is providing print ser ...

  3. Cocos2d-x 3.0 事件系统【转】

    事件系统,是一个软件的核心组成部分.从小处讲它是应用程序内部各模块交互的设计模式,从大处讲,它是软件架构的组成模块.在现代软件开发中,操作系统通常通过一些预定义的事件,告知应用程序发生的一些事情如用户 ...

  4. js对象1--杂志

    1.对象数组 var arr = [ ]       //直接量创建 var arr = array()   //通过函数创建 2. 变量与对象 var a = 12;    //变量,不属于谁(默认 ...

  5. Appium环境搭建Java篇

    1.下载.安装JDK&配置Java环境变量 JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html ...

  6. UDKtoUE4Tool-UDKUE3资源移植UE4工具

    UDKtoUE4Tool UDKtoUE4Tool 是一个把UE3/UDK资源包(T3D格式)转换成UE4(T3D格式)的工具.作者Matt3D使用C#实现,未来考虑发布到Unreal Marketp ...

  7. windows 10 笔记本关机不断电解决

    右键我的电脑-->管理-->设备管理器-->系统设备 找到Intel(R) Management Engine Interface  双击打开,禁用,确定,完事 原因,该驱动11.0 ...

  8. python分析log

    最近做的一个项目,系统log下会生成如下的log(部分): [-- ::] Processing File transfer configured from ship to shore.... [-- ...

  9. 【ITOO 2】使用ArrayList时的注意事项:去除多余的null值

    问题描述:在课表导入的时候,将数据从excel表里读出,然后将list批量插入到对应的课程表的数据表单中去,出现结果:当我们导入3条数据时,list.size()为3,但是实际上,list里面存在10 ...

  10. iptable防火墙配置

    /etc/sysconfig/iptables /etc/init.d/iptables {start|stop|restart|condrestart|status|panic|save} ipta ...