定时器输入捕获频率
基础知识
- 定时器是一种特殊的计数器,它对周期已知的脉冲信号进行计数,通过计数次数来算出计数时间。对于已知的脉冲信号(内部时钟信号),可以使用定时器模式,对于未知的脉冲信号(外部脉冲信号),只能使用计数器模式。

- 定时器使用时关注的三个问题:位宽、计数值、处理。
- STM32定时器分类:
基本定时器只能用于定时/计数。一般用作时基。通用定时器在基本定时器的基础上增加了一个外部引脚,可以实现输入捕获与输出比较等功能。传感器数据采集主要用通用定时器的输入捕获功能。高级定时器TIM1与TIM8相比于通用定时器增加了电机控制与数字电源设计相关的功能。

- 输入捕获一般应用在两个方面,一个方面是计算脉冲跳变沿时间的方式测量脉宽与频率,另一方面是用 PWM 输入的方式测量脉宽与频率。
- 测周期是通过相邻两次中断计数值之差来换算的。那么两次进入中断要将计数值保存在两个不同的变量中,必然导致中断里面要有分支。
- 一个外设有几类功能,HAL库就给它定义了几种初始化数据类型来初始化结构体。
- GPIO成为简单外设。定时器之类的属于复杂外设。HAL库对于复杂外设在程序中的描述,有三种基本的设计方法:句柄设计——设计了统一的外设句柄数据类型PPP_ HandleTypeDef。编程模型——设计了轮询、中断、DMA三种编程模型。通用接口函数——设计了四类通用的接口函数。




- 时基单元分为:预分频模块、计数模块、自动重载模块。

测量脉冲宽度或者测量频率流程
- 设置TIM2 CH1为输入捕获功能;
- 设置上升沿捕获;
- 使能TIM2 CH1捕获功能;
- 捕获到上升沿后,存入capture_buf[0],改为捕获下降沿;
- 捕获到下降沿后,存入capture_buf[1],改为捕获上升沿;
- 捕获到上升沿后,存入capture_buf[2],关闭TIM2 CH1捕获功能;
- 计算:capture_buf[2] - capture_buf[0]就是周期,capture_buf[1] - capture_buf[0]就是高电平所占时间。
代码实现
main.c
只写

本文介绍STM32定时器输入捕获功能的基本原理及应用,包括测量脉冲宽度与频率的方法,并提供了一段代码示例。

2782

被折叠的 条评论
为什么被折叠?



