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

发布者:等放假的Lwj最新更新时间:2017-02-05 来源: eefocus关键字:STM32F4  TIM  输入波形捕获  脉冲频率 手机看文章 扫描二维码
随时随地手机看文章

Ⅰ、概述

本文在前面文章“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文件下面;

 

注意2点:

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.

 

Ⅴ、说明

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

 

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


关键字:STM32F4  TIM  输入波形捕获  脉冲频率 引用地址:STM32F4_TIM输入波形捕获(脉冲频率)

上一篇:STM32F10x_RTC秒中断
下一篇:STM32F4_TIM输出PWM波形(可调频率、占空比)

推荐阅读最新更新时间:2024-03-16 15:32

STM32F429--中断应用概览
01 异常类型 02 NVIC简介 03 优先级的定义 04 中断编程(顺序,寄存器) STM32的中断非常强大,STM32每个外设可以产生中断,可粗略认为,异常就是中断,中断就是异常。 一: 1.系统异常,体现在内核水平 -3~6 2.外部中断,体现在外设水平 二: 1- 嵌套向量中断控制器 NVIC ,用来控制这么多的外设中断 Nested vectored interrupt controller 两个重要的库文件:core_cm4.h和misc.h 2- 中断 中断使能寄存器 中断清除寄存器 中断使能悬起寄存器 中断清除悬起寄存器 中断有效位寄存器 中断优先级寄存器(8Bit wide) 软件触
[单片机]
【STM库应用】stm32 之 TIM (详解二 脉冲宽度、周期测量)
今天主要是用TIM3进行PWM的输入模式,进行对矩形波的脉冲信号宽度以及其周期进行测量,先来看一幅图。 图1 TIM内部逻辑图 我们先来看看datasheet上是怎么说的: 该模式是输入捕获模式的一个特例,除下列区别外,操作与输入捕获模式相同: ● 两个ICx信号被映射至同一个TIx输入。 ● 这2个ICx信号为边沿有效,但是极性相反。 ● 其中一个TIxFP信号被作为触发输入信号,而从模式控制器被配置成复位模式。 例如,你需要测量输入到TI1上的PWM信号的长度(TIMx_CCR1寄存器)和占空比(TIMx_CCR2 寄存器),具体步骤如下(取决于CK_INT的频率和预分频器的值) ● 选择TIMx_CCR1的有效
[单片机]
【STM库应用】stm32 之 <font color='red'>TIM</font> (详解二 <font color='red'>脉冲</font>宽度、周期测量)
STM32F4的库函数分析如何实现点亮一个LED(代码启动)(二)
这部分的启动代码,主要是将堆栈进行初始化,中断向量表以及中断函数进行定义。 这里将启动文件拆分出来进行理解。 Stack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size __initial_sp 这里将申请一段栈空间,AREA意思为申请的空间名为STACK,不对其进行初始化,可读可写,以三字节进行偏移,栈大小为 0x400 ; h Heap Configuration ; o Heap Size (in Bytes) 0x0-0xFFFFFFFF:8 ;
[单片机]
从<font color='red'>STM32F4</font>的库函数分析如何实现点亮一个LED(代码启动)(二)
STM32F429 >> 18. 电源管理_实现低功耗(Code)
睡眠 进入睡眠的方式很简单: 只需要调用WFI 或WFE 命令,在睡眠模式中,内核停止,但是所有外设,包括M4 核心的外设均处于工作状态中。 唤醒睡眠的方式: 任一中断; 唤醒事件。 // Wait For Interrupt __WFI(); // Wait For Event __WFE(); 停止 进入停止的操作为: 调用 PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry) 函数。 唤醒停止的操作为: 任一外部中断。 PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEn
[单片机]
STM32F4的CAN通信讲解
#include CAN.h #define CAN_Tx_Port GPIOH #define CAN_Tx_Pin GPIO_Pin_13 #define CAN_Rx_Port GPIOI #define CAN_Rx_Pin GPIO_Pin_9 CanTxMsg CAN_Tx_Msg; CanRxMsg CAN_Rx_Msg; u8 msg_box; u8 std; /* CAN 总线GPIO配置 */ void CAN_GPIO_Config(void) { GPIO_InitTypeDef GPIO_init; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH|RCC_
[单片机]
<font color='red'>STM32F4</font>的CAN通信讲解
STM32F4读写内部FLASH【使用库函数】
STM32F4Discovery开发帮使用的STM32F407VGT6芯片,内部FLASH有1M之多。平时写的代码,烧写完之后还有大量的剩余。有效利用这剩余的FLASH能存储不少数据。因此研究了一下STM32F4读写内部FLASH的一些操作。 【STM32F4 内部Flash的一些信息】 STM32F407VG的内部FLASH的地址是:0x08000000,大小是0x00100000。 写FLASH的时候,如果发现写入地址的FLASH没有被擦出,数据将不会写入。FLASH的擦除操作,只能按Sector进行。不能单独擦除一个地址上的数据。因此在写数据之前需要将地址所在Sector的所有数据擦除。 在STM32F4的编程手册上可找到F
[单片机]
<font color='red'>STM32F4</font>读写内部FLASH【使用库函数】
STM32F103ZET定时器TIM1输出六路带死区互补PWM波形
使用默认引脚输出6路PWM,#define FullRemap_TIM1则重映射 PIN脚; 遗留问题:调用TIM_CCxNCmd(TIM1, TIM_Channel_X, TIM_CCx_Enable);导致互补PWM无输出。 TIM_CCxCmd(TIM1, TIM_Channel_X, TIM_CCx);确可以正常开关PWM输出; 遇到问题:PA8、10、PB13、14、15均有输出,PA9无输出; 问题解决:虽然没初始化UART1模块,但打开RCC_APB2Periph_USART1时钟导致; void Timer1_Init(void) { TIM_OCInitTypeDef TIM_OCIni
[单片机]
研诺推电流模式降压转换器 全电流时将锂离子电池输入转为3.3V输出
           减小方案尺寸、简化系统设计 美国加利福尼亚州桑尼维尔市,2007年8月28日 ——专为移动消费电子设备提供电源管理半导体器件的开发商研诺逻辑科技有限公司(AnalogicTech, 纳斯达克交易代码:AATI) ,日前宣布推出编号为AAT1112 和 AAT1145的两款器件,分别为1.5A和1.2A恒频恒电流模式降压转换器。这两款新型电流模式转换器采用小型3x3mm TDFN封装,无需外部补偿组件,同时为设计人员提供高度紧凑、简单易用的解决方案。 “许多便携式电子设备包含的电路都要求3.3V供电电压,”研诺产品线总监Bill Weiss说。“与电压模式降压转换器相比,电流模式的AAT1112 和AAT1
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved