STM32 输入捕获模式测频率

这篇具有很好参考价值的文章主要介绍了STM32 输入捕获模式测频率。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

单片机学习!

目录

文章目录

前言

一、输入捕获测频率配置步骤

二、代码示例及注意事项

2.1 RCC开启时钟

2.2 GPIO初始化

2.3 配置时基单元

2.4 配置输入捕获单元

2.5 选择从模式的触发源

2.6 配置从模式为Reset

2.7 开启定时器

总结


前言

        博文介绍如何配置输入捕获电路来测量频率。


一、输入捕获测频率配置步骤

stm32 输入捕获频率测量,STM32,stm32,嵌入式硬件,单片机

第一步、RCC开启时钟,把GPIO和TIM的时钟打开。

第二步、GPIO初始化,把GPIO配置成输入模式。一般选择上拉输入或者浮空输入模式。

第三步、配置时基单元,让CNT计数器在内部时钟的驱动下自增运行。

第四步、配置输入捕获单元,包括滤波器、极性、直连通道还是交叉通道、分频器这些参数。用一个结构体就可以统一进行配置了。

第五步、选择从模式的触发源,触发源选择为TI1FP1,这里调用一个库函数,给一个参数就行。

第六步、选择触发之后执行的操作,执行Reset操作,这里也是调用一个库函数就行了。

第七步、开启定时器,调用TIM_Cmd函数。

        按以上步骤配置,所有的电路就能配合起来,按照需求工作。当需要读取最新一个周期的频率时,直接读取CCR寄存器,然后按照 fc/N 计算以下就行了。

二、代码示例及注意事项

2.1 RCC开启时钟

        将需要的TIM外设GPIO外设的时钟打开。打开时钟后定时器的基准时钟和整个外设的工作时钟就会同时打开。

代码示例:

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使用APB1的开启时钟函数,因为TIM3是APB1总线的外设。
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

2.2 GPIO初始化

        GPIO口可以在引脚定义表中查看:

stm32 输入捕获频率测量,STM32,stm32,嵌入式硬件,单片机

        默认复用功能这一列就是片上外设的端口和GPIO的连接关系。可以找到 TIM3的通道1和通道2对应PA6和PA7;TIM3的通道3和通道4对应PB0和PB1.本文举例使用TIM3的通道1引脚,所以就初始化PA6引脚。

        GPIO配置成输入模式,选择上拉输入。

代码示例:

	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IPU;//这里选择上拉输入
	GPIO_InitStruct.GPIO_Pin= GPIO_Pin_6;
	GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);

2.3 配置时基单元

        配置时基单元,包括时钟源选择的配置。

  1. 时基单元选择时钟源。
  2. 配置时基单元,包括预分频器、自动重装器、计数模式等,这些参数可用结构体配置。

代码示例:

	TIM_InternalClockConfig(TIM3);

    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision= TIM_CKD_DIV1;//指定时钟分频
	TIM_TimeBaseInitStructure.TIM_CounterMode= TIM_CounterMode_Up;//计数器模式
	TIM_TimeBaseInitStructure.TIM_Period= 65536-1;//ARR自动重装器的值
	TIM_TimeBaseInitStructure.TIM_Prescaler= 72-1;//PSC预分频器的值
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter= 0;//重复计数器的值
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);

结构体成员:

  • TIM_ClockDivision:指定时钟分频,用于信号经过滤波器时的滤波采样频率。
  • TIM_CounterMode:计数器模式,这里选择向上计数模式TIM_CounterMode_Up。
  • TIM_Period :ARR自动重装器的值,设置大一些防止计数溢出。这里设置65536-1,也就是16位的计数器满量程计数。
  • TIM_Prescaler:PSC预分频器的值,这个值决定了测周法的标准频率fc,72M / 预分频,就是计数器自增的频率,就是计数标准频率。这里给 72-1,这样标准频率就是72M / 72 = 1MHz。
  • TIM_RepetitionCounter:重复计数器的值,只有高级定时器才有,本文初始化通用寄存器,所以值给0。

2.4 配置输入捕获单元

代码示例:

TIM_ICInitTypeDef TIM_ICInitStructure;
TIM_ICInitStructure.TIM_Channel=TIM_Channel_1;//TIM_Channel选择通道
TIM_ICInitStructure.TIM_ICFilter=0xF;//TIM_ICFilter用来配置输入捕获的滤波器
TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;//TIM_ICPolarity极性
TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICSelection_DirectTI;//TIM_ICPrescaler分频器
TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;//TIM_ICSelection配置数据选择器

TIM_ICInit(TIM3,&TIM_ICInitStructure);


        TIM_Channel选择通道,因为TIM_ICInit函数只有一个,所以要靠结构体的这个参数来指定是配置哪个通道。这里选择通道1.

        TIM_ICFilter用来配置输入捕获的滤波器,如果信号有毛刺和噪声,就可以增大滤波器参数,可以有效避免干扰。参数的取值范围0x0到0xF之间,数越大滤波效果越好,每个数值对应的采样频率和采样次数,可查看参考手册。

        注意滤波器和分频器的区别,虽然两者都可以计次,但是滤波器计次并不会改变信号的原有频率,一般滤波器的采样频率会远高于信号频率,所以它只会滤除高频噪声,使信号更平滑,1KHz滤波之后仍然是1KHz,信号频率不会变化。而分频器就是对信号本身进行计次了,会改变频率。1KHz,2分频之后就是500Hz,4分频之后就是250Hz。

        TIM_ICPolarity极性,这个对应图中边沿检测、极性选择的部分,选择上升沿触发还是下降沿触发。这里需要上升沿触发。

  • TIM_ICPolarity_Rising上升沿触发
  • TIM_ICPolarity_Falling下降沿触发
  • TIM_ICPolarity_BothEdge上升沿下降沿都触发

        TIM_ICPrescaler分频器,这个参数配置的是对应图中触发信号分频器。不分频就是每次触发都有效,二分频就是每隔一次有效一次,以此类推。

  • TIM_ICPSC_DIV1  不分频  
  • TIM_ICPSC_DIV2  二分频       
  • TIM_ICPSC_DIV4  四分频                   
  • TIM_ICPSC_DIV8  八分频                   

这个分频值不能任意指定,只能选择这4种,这里需要每次出发都有效,所以选择TIM_ICPSC_DIV1不分频。

        TIM_ICSelection选择触发信号从哪个引脚输入,这个参数是配置数据选择器的,可以选择直连通道或者交叉通道。示例选择了TIM_ICSelection_DirectTI直连通道输入。

  • TIM_ICSelection_DirectTI直连通道的输入
  • TIM_ICSelection_IndirectTI交叉通道的输入

        最后把TIM_ICInitStructure结构体地址放在TIM_ICInit函数里。

2.5 选择从模式的触发源

        配置TRGI的触发源为TI1FP1.

代码示例:

	TIM_SelectInputTrigger(TIM3,TIM_TS_TI1FP1);

stm32 输入捕获频率测量,STM32,stm32,嵌入式硬件,单片机

  *     @arg TIM_TS_ITR0: Internal Trigger 0
  *     @arg TIM_TS_ITR1: Internal Trigger 1
  *     @arg TIM_TS_ITR2: Internal Trigger 2
  *     @arg TIM_TS_ITR3: Internal Trigger 3
  *     @arg TIM_TS_TI1F_ED: TI1 Edge Detector
  *     @arg TIM_TS_TI1FP1: Filtered Timer Input 1
  *     @arg TIM_TS_TI2FP2: Filtered Timer Input 2
  *     @arg TIM_TS_ETRF: External Trigger input

        这里给出的8个可选触发源对应上图触发源选择的8个模式。这里选择TIM_TS_TI1FP1。
 

2.6 配置从模式为Reset

代码示例:

	TIM_SelectSlaveMode(TIM3,TIM_SlaveMode_Reset);

stm32 输入捕获频率测量,STM32,stm32,嵌入式硬件,单片机

  *     @arg TIM_SlaveMode_Reset: Rising edge of the selected trigger signal (TRGI) re-initializes
  *                               the counter and triggers an update of the registers.
  *     @arg TIM_SlaveMode_Gated:     The counter clock is enabled when the trigger signal (TRGI) is high.
  *     @arg TIM_SlaveMode_Trigger:   The counter starts at a rising edge of the trigger TRGI.
  *     @arg TIM_SlaveMode_External1: Rising edges of the selected trigger (TRGI) clock the counter.

        这里的4种从模式对应上图中的4种从模式。从模式中还有3个Encoder从模式,是给编码器接口用的,有其他函数可以配置。

        例子中选择Reset这个模式。

2.7 开启定时器

        开启定时器,调用TIM_Cmd函数。

代码示例:

	TIM_Cmd(TIM3,ENABLE);

        启动定时器之后,CNT就会在内部时钟的驱动下不断自增。即使信号没有过来,它也会不断自增,等到有信号来的时候,会在从模式的作用下自动清零,不会影响测量。

        初始化之后整个电路就可以全自动测量了。


总结

        以上就是今天要讲的内容,本文仅仅简单介绍了输入捕获的配置步骤和注意事项。文章来源地址https://www.toymoban.com/news/detail-838131.html

到了这里,关于STM32 输入捕获模式测频率的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32输入捕获测频率&PWM模式测频率占空比

    本文章转自B站江科大自化协    1,输入捕获测频率 接线图  目录结构 IC.h IC.c pwm.c PWM.h      main.c 编译下载出结果   2.PWM模式测频率占空比 接线图同上 目录结构同上 IC.c  IC.h main.c 编译下载测试     PS:测h   

    2024年02月15日
    浏览(33)
  • STM32学习笔记(六)丨TIM定时器及其应用(输入捕获丨测量PWM波形的频率和占空比)

    ​  本次课程采用单片机型号为STM32F103C8T6。 ​  课程链接:江科大自化协 STM32入门教程   往期笔记链接:   STM32学习笔记(一)丨建立工程丨GPIO 通用输入输出   STM32学习笔记(二)丨STM32程序调试丨OLED的使用   STM32学习笔记(三)丨中断系统丨EXTI外部中断

    2023年04月19日
    浏览(54)
  • 11、江科大stm32视频学习笔记——输入捕获模式测频率、PWMI模式测频率占空比

    目录 一、知识点 1、IC(Input Capture)输入捕获 2、通用定时器结构 (1)输出比较的执行逻辑 (2)四个输入捕获和输出比较通道 (3)输入捕获的执行流程和输出比较的区别 (4)输入捕获的作用 (5)输入捕获通道 (6)PWMI模式:同时测量频率和占空比 (7)主从触发模式:

    2024年02月13日
    浏览(40)
  • 基于HAL库的STM32单定时器多路输入捕获测量PWM的频率和占空比实现(状态机方式实现)

    目录  写在前面 先回顾下定时器的单路捕获PWM 多路捕获PWM的频率和占空比(状态机实现) 我的思路: 状态图 配置 给出示例代码 测试效果         先有了这篇文章实现了单定时器的多通道测量频率,以外部时钟的方式可测量任意频率的方波),奈何不能多路测试PWM波的频率,

    2024年02月12日
    浏览(47)
  • STM32单片机(六)TIM定时器 -> 第六节:TIM输入捕获练习(输入捕获模式测频率和PWMI模式测频率占空比)

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月09日
    浏览(39)
  • STM32 通过PWM输出一个方波并通过定时器输入捕获模式测量方波的周期(cubeMX+keil配置)

    前言:本文章用cubeMX和keil来进行代码编写,实现STM32的相应功能 本文章使用的STM32核心板是STM32H743VIT6,如果使用的是其他的核心板操作过程类似,可以尝试使用此教程。 (1)首先点击左侧的Timers  (2)选择一个定时器配置PWM 我选择的是TIM5,如上图 点击TIM5 Mode的配置如下

    2024年02月19日
    浏览(52)
  • STM32定时器输入捕获测量高电平时间

    本篇内容要求读者对STM32通用定时器有一点理解,如有不解,请看 夜深人静学32系列15——通用定时器 输入捕获是STM32通用定时器的一种功能,可以捕获特定引脚的电平变化(上升沿/下降沿) 对于一个变化的信号。只需要测量上升沿与下降沿的时间间隔,即可计算出高电平的

    2024年02月21日
    浏览(40)
  • STM32——输入捕获IC(测试频率以及PWMI测试频率占空比)

    目录 一、IC介绍 1.1、IC作用 1.2、电路部分  1.2.1、详细电路作用  1.2.2、从模式控制器 1.3、输入捕获配置基本结构 1.3.1、PWMI模式 二、代码配置 2.1、从模式函数 2.1.1、TIM_SelectInputTrigger() 2.1.2、TIM_SelectSlaveMode() 2.1.3、TIM_SelectSlaveMode() 2.2.输入捕获及时基单元函数 2.2.1、

    2024年01月25日
    浏览(40)
  • 【单片机】STM32单片机,定时器的输入捕获,基于捕获的频率计,STM32F103

    下面的定时器都具有输入捕获能力: 查看另一篇文章:https://qq742971636.blog.csdn.net/article/details/131471539 外部计数频率计的缺点:需要两个定时器配合,最高能测量的频率是否有限制我没具体尝试。 基于捕获的频率计的缺点:最高能测量的频率有限制。 TIM3_CH1 PWM PA6 10KHZ。 输入

    2024年02月14日
    浏览(52)
  • STM32 TIM输入捕获测频率占空比库函数

    目录 一、输入捕获初始化函数 TIM_ICInit TIM_PWMIConfig TIM_ICStructInit 二、主从触发模式对应函数 TIM_SelectInputTrigger TIM_SelectOutputTrigger TIM_SelectSlaveMode 三、配置分频器函数 TIM_SetIC1Prescaler TIM_SetIC2Prescaler TIM_SetIC3Prescaler TIM_SetIC4Prescaler 四、读取CCR函数 TIM_GetCapture1 TIM_GetCapture2 TIM_GetCap

    2024年02月20日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包