首页 > 其他分享 >定时器之输入捕获

定时器之输入捕获

时间:2023-08-22 21:25:04浏览次数:42  
标签:触发 CNT 定时器 捕获 TIM 输入 清零 ICInitStructure

同一个定时器,输入捕获和输出比较只能使用一个 

检测到电平跳变,执行后面的动作。当前CNT的值,锁存到CCR寄存器中

 

 

 高频使用测频法,低频使用测周法,分界值呢?使用中界频率区分

 测频法实现逻辑:

每来一个上升沿记一次X+=1,    使用定时器定时1S,到时间统计这个X值,就是频率,同时清零,再次计数,循环

测周法实现逻辑:

 使用标准频率,统计两个上升沿中间有几个标准频率

 

PWMI

 

第一个通道使用上升沿触发来捕获周期

第二个通道使用下降沿触发,来捕获占空比,两个通道同时对一个引脚进行捕获

捕获电路:

每来一个触发信号。CNT的值。就会向CCR转运一次,同时发生一个捕获事件,

这个事件会在状态寄存器置标志位。同时也可产生中断

作用:CNT计数器由内部的标准时钟驱动,可以用来计量两个上沿的时间间隔(周期),每次捕获后要把CNT清零(可以使用主从触发模式,自动清零)   【测周法】

 主从触发模式(完成CNT自动清零)

 

 

 测周法逻辑图解

 GPIO输入方波信号,经过滤波器和边缘检测,选择TI1FP1为上升沿触发,选择直连的通道,不分频, 当TI1FP1出现上升沿时,CNT的当前计数的值转运到CCR1,同时触发源选择,选中TI1FP1为触发信号,进入从模式的复位操作,触发CNT清零,先捕获再清零,这个顺序如何确定呢

这里从模式只能用通道1和通道2, 通道3、4 只能开启捕获中断,再中断中手动清零

使用时只需要读取CCR1就可以得到数据

//输入捕获通道配置
	TIM_ICInitTypeDef TIM_ICInitStructure;
	TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;  //选择4个通道的通道1
	TIM_ICInitStructure.TIM_ICFilter = 0xF; //选择滤波器
	TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //触发极性
	TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; // 每隔几次有效一次,分频
	TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//配置数据选择器(直连还是交叉)
	TIM_ICInit(TIM3, &TIM_ICInitStructure);
	//触发源选择,配置TRGI的触发源为TI1FP1
	TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);
	//配置从模式,当信号来时自动置零CNT
	TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);

 TI1FP1上升沿触发

 TI1FP2下降沿触发,通过交叉去触发通道2的捕获(高电平)

CCR1从0开计数,计数到CCR2,下降沿触发,不会清零,到下一个上升沿CCR1数值为颜色线,CCR2数值为红色线,此刻占空比为红/蓝,同时可以清零CNT,开始下一轮计数

代码实现逻辑1:分为两个结构体分别配置实现

代码实现逻辑2:使用其内置的方法TIM_PWMIConfig(),自动把另外一个通道初始化为相反的配置(通道1,直连,上升沿 ==通道2,交叉,下降沿)

	TIM_ICInitTypeDef TIM_ICInitStructure;
	TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
	TIM_ICInitStructure.TIM_ICFilter = 0xF;
	TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
	TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
	TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
	TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);
uint32_t IC_GetDuty(void)
{	
	//高电平的计数值存在CCR2里,周期计数值存在CCR1里
	return (TIM_GetCapture2(TIM3) + 1) * 100 / (TIM_GetCapture1(TIM3) + 1);
}

代码都为测周法

PWM配置

先确定ARR(与分辨率相关),PSC决定频率,CCR决定占空比

1开始GPIO和TIM的RCC时钟

2GPIO初始化

3配置时基单元

4配置输入捕获单元 

5选择从模式的触发源,并选择其执行的操作

6TIM_Cmd开启定时器

7直接赌气CCR寄存器,fc/n 得到频率

标签:触发,CNT,定时器,捕获,TIM,输入,清零,ICInitStructure
From: https://www.cnblogs.com/liujinmeng/p/17643855.html

相关文章

  • 定时器
      基本定时器,只能使用内部时钟 时基单元包括:PSC预分频器、CNT计数器、自动重装寄存器 当PSC=0时不分频,还是72MHz;当PSC=1时就是2分频,等于72/2=36MHz   16位 CNT计数器对分频后的脉冲计数,通过上升沿+1   16位,//当值增加到65535后再增加就清零,触发中断,运......
  • Excel 单元格添加输入限制
    Excel单元格添加输入限制Excel中需要对单元格中可输入的内容进行限定,可以使用"数据有效性"进行限定。 情景一,单元格中输入的内容是某些固定选项某些单元格需要输入的内容都是某几个固定选项,例如是和否,男或女等,这事可以将这些单元格的输入限定为这些选项,避免不规范内容的出......
  • 爬虫异常处理:异常捕获与容错机制设计
    作为一名专业的爬虫程序员,每天使用爬虫IP面对各种异常情况是我们每天都会遇到的事情。在爬取数据的过程中,我们经常会遇到网络错误、页面结构变化、被反爬虫机制拦截等问题。在这篇文章中,我将和大家分享一些关于如何处理爬虫异常情况的经验和技巧。通过异常捕获和容错机制的设计,我们......
  • OpenHarmony系统解决方案 - 输入法弹出时按返回键原页面返回或应用退出
    问题描述问题环境系统版本:OpenHarmony-3.2-Release问题现象打开任意包含输入组件界面的应用,点击输入组件弹出输入法。点击返回按键。输入法隐藏,原应用页面返回或应用退出。异常效果点击返回按键,输入法隐藏,原应用页面返回或应用退出。正常效果点击返回按键,仅隐藏输入法。问题原因由......
  • vue_中文输入法情况下, 输入框v-model绑定值中没有输入值但却触发input事件
    今天写的一个搜索框,要求输入字符时不作处理,直到用户点击搜索按钮时才执行搜索逻辑;当用户将搜索框文本删除至空字符串时,执行一次无搜索值的搜索逻辑,用于将表格数据恢复至无筛选;在这个功能上我想当然地使用了input事件用于触发输入事件,但是被测试出bug:当输入法是......
  • 10 JavaScrit定时器
    10JavaScrit定时器在JS中,有两种设置定时器的方案://语法规则t=setTimeout(函数,时间) //经过xxx时间后,执行xxx函数//5秒后打印我爱你t=setTimeout(function(){console.log("我爱你")},5);window.clearTimeout(t)//停止一个定时器//语法规则t=se......
  • 立式门禁软件定时器问题
    论坛文章:文章1文章2注意:rttgpio驱动有问题,使用时注意啦......
  • sql执行异常怎样捕获
    在处理SQL执行异常时,可以使用try-catch块来捕获和处理异常。具体步骤如下:在执行SQL语句的代码块前添加try关键字,然后将可能引发异常的代码放在try块内。使用catch块捕获异常,并在catch块中处理异常情况。下面是一个示例代码片段,展示了如何捕获和处理SQL执行异常:impo......
  • CH32V003的系统定时器SysTick
    在CH32V003内部有一个特殊的定时器——系统定时器(SysTick),它位于青稞V2微处理内核里面,是RISC-V内核的一个组成部分,主要用来给操作系统提供时间片轮转的定时,一般固定为10ms的定时,所以中文也称它为“嘀嗒”定时器(也称“心跳”定时器)。在不跑操作系统时,可以把它当作普通定时器来使用,一......
  • Linux之定时器
    Linux下的实现方式socket选项SO_RECVTIMEO和SO_SNDTIMEOSIGALRM信号信号相关笔记:Linux之信号I/O复用系统调用的超时参数定时器及其容器定时器封装了以下内容超时时间回调函数:就是每次时间到了要干嘛连接资源:包括客户端socket地址、socket文件描述符、定......