《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.9 TIM---输入捕获(脉冲频率测量)实验

写在前面——
《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.9 TIM—输入捕获(脉冲频率测量)实验,讲解TIM输入捕获的原理,以及STM32CubeMX配置和程序设计方法
官方例程下载:https://pan.baidu.com/s/1QC5BnDgY1m1me6-ihQ_OUQ?pwd=nqb1
提取码:nqb1

4.9 TIM—输入捕获(脉冲频率测量)实验

4.9.1. 实验任务

  1. TIM普通输入捕获模式:参看官方例程HAL_11_TIM_FRQ,实现板载信号的输入捕获,测量其频率。
  2. TIM输入捕获PWM模式:测量脉宽/占空比。

4.9.2. TIM输入捕获的原理解析

  输入捕获可以对输入信号的上升沿,下降沿或者双边沿进行捕获,可以测量输入信号的脉宽和测量 PWM 输入信号的频率和占空比。
  输入捕获分为普通输入捕获模式(测频)和PWM输入模式(测频+占空比)。在这里插入图片描述
输入通道与捕获通道的区别
  输入通道:需要被测量的信号从定时器的外部引脚 TIMx_CH1/2/3/4 进入,通常叫 TI1/2/3/4,在后面的捕获讲解中对于要被测量的信号我们都以 TIx 为标准的叫法
  捕获通道:捕获通道就是输入捕获整体结构图中的 IC1/2/3/4,每个捕获通道都有相对应的捕获寄存器 CCR1/2/3/4,当发生捕获的时候,计数器 CNT 的值就会被锁存到捕获寄存器。
  输入通道是用来输入信号的,捕获通道是用来捕获输入信号的通道,一个输入通道的信号可以同时输入给两个捕获通道。
普通输入捕获模式
  当捕获到信号的跳变沿的时候,把计数器 CNT 的值锁存到捕获寄存器 CCR 中,这就是普通输入捕获模式。
在这里插入图片描述
  普通输入捕获模式,通常用于测量频率。其原理简单来说,以上升沿捕获为例,如上图:
 第一次上升沿来临时,发生捕获中断,记录value1=当前计数值CNT。
 当第二次上升沿来临,再次发生捕获中断,记录value3=当前计数值CNT,并清除捕获记录标记。
 根据value3和value1差值,计算出输入信号的频率。
PWM输入模式
  普通输入捕获模式也可以用来计算脉宽(占空比),但是配置复杂。一般使用PWM输入模式,同时计算频率和脉宽。
  PWM 输入模式需要占用两个捕获通道IC1和IC2。
  当使用 PWM 输入模式的时候,因为一个输入通道(TIx)会占用两个捕获通道(ICx),所以一个定时器在使用 PWM 输入的时候最多只能使用两个输入通道(TIx),如下图。
在这里插入图片描述
  如上图,PWM 信号由输入通道 TI1 进入,信号会被分为两路,一路是 TI1FP1,另外一路是 TI2FP2。其中一路是测周期,另一路是测占空比。由此,定时器的输入捕获有两个功能,直接捕获模式和间接捕获模式;
 直接捕获:只能捕获本身通道的脉冲信号;
 间接模式:可以捕获此定时器每个通道的脉冲信号。
  通常,测频支路设置成直接捕获模式,而测脉宽的支路设置成间接模式。
PWM 输入模式原理:
在这里插入图片描述
 当第一次上升沿时,IC1和IC2同时捕获中断,计数器CNT清零;
 到了下降沿的时候,IC2捕获中断,此时计数器CNT的值被锁存到捕获寄存器CCR2中;
 到了下一个上升沿的时候,IC1捕获中断,计数器CNT的值被锁存到捕获寄存器CCR1中
 CCR2测量的是脉宽,CCR1测量的是周期。
可见,输入捕获的两大核心功能:
1)捕获定时器的数值。
2)产生中断,类似于外中断,比如,上升沿产生中断。

  开发板上配置了两个555作为信号发生器(U8,U7),通过可调电阻R40,R39调节信号频率,两个输出引脚分别连接在PA15和PB4引脚上,如下图。
在这里插入图片描述
在这里插入图片描述
  查阅芯片资料,可以得知这两个引脚可用作以下定时器的输入捕获:PA15–> TIM2_CH1(AF1); PB4 --> TIM3_CH1(AF2)。
在这里插入图片描述
在这里插入图片描述

4.9.3. 初始化配置(STM32CubeMX)

以PA15输入信号进行TIM2_CH1输入捕获、测频为例,在STM32CubeMX中进行配置。
对PA15引脚,选择TIM2_CH1。
在这里插入图片描述
这里选择复位Reset模式、Tl1FP1(由定时器的输入信号触发)、内部时钟。
在这里插入图片描述
定时频率设置为1MHz;上升沿触发;直接捕获方式。
在这里插入图片描述
NVIC中,打开TIM2中断,可设置中断服务优先级,
在这里插入图片描述
在这里插入图片描述
SYS、时钟树(80MHz)、项目名称、路径等配置,参看前述章节。
LCD无需在STM32CubeMX中配置,参看前述方法,复制相关文件到本项目工程中。

4.9.4. 应用程序设计(KEIL5)

1. TIM输入捕获HAL库函数

  TIM相关的HAL库函数在stm32g4xx_hal_tim.h文件中可查询到。这里,仅使用TIM作输入捕获(中断方式),主要使用的库函数有:

  • //中断方式启动捕获–启动输入捕获功能,并使能相应的中断
    HAL_StatusTypeDef HAL_TIM_IC_Start_IT (TIM_HandleTypeDef *htim, uint32_t Channel)
  • //中断方式停止捕获–关闭定时器某一通道的输入捕获功能和相应中断
    HAL_StatusTypeDef HAL_TIM_IC_Stop_IT (TIM_HandleTypeDef *htim, uint32_t Channel)
  • //获取当前的捕获值–读取CCRx寄存器的值
    uint32_t HAL_TIM_ReadCapturedValue (TIM_HandleTypeDef *htim, uint32_t Channel)

还可以使用已定义宏(也在stm32g4xx_hal_tim.h):
读取计数值:__HAL_TIM_GET_COUNTER (&htim)
重新设置计数值:__HAL_TIM_SET_COUNTER (&htim, COUNTER)
建议使用函数HAL_TIM_ReadCapturedValue捕获计数值。

  • //输入捕获中断回调函数
    void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)

2. TIM输入捕获与测频、LCD显示

  根据前面4.9.3节,完成TIM输入捕获的STM32CubeMX配置。KEIL5打开工程项目后,首先把LCD初始化相关的操作完成,参看4.4 LCD显示实验,添加lcd.c、lcd.h、font.h到本项目中,并在main.c中完成初始化。

在这里插入图片描述在这里插入图片描述
1)编写输入捕获的中断回调函数
输入捕获发生中断时,自动执行其中断回调函数HAL_TIM_IC_CaptureCallback,但是中断回调函数需要在main.c中手动编写,如:

/* USER CODE BEGIN 0 */
uint32_t Freq;//获得频率值,全局变量
uint16_t Counter;//获得计数值,全局变量
/* 输入捕获中断服务函数 上升沿中断 */
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
   
    
  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是春老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值