野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13634|回复: 7

关于STM32通用定时器,使用TIM2,CH1,CH2,CH3,CH4做输入捕捉测频率的问题,求教~

[复制链接]
发表于 2017-7-22 10:32:12 | 显示全部楼层 |阅读模式
本帖最后由 Dandri 于 2017-7-22 10:33 编辑

我在比赛的时候需要比较准确测量方波的频率,想直接用TIM的通用定时器做输入捕捉,开始都想好了,但是写到中断的时候,忽然发现,假如我都用 TIM2 的四个通道,每次中断都是进入的 这 TIM2 的中断,虽然我可以使用库函数:
  1. TIM_GetITStatus (TIM2, TIM2_IT_CCx)
复制代码
来获取是哪个通道 产生了 输入比较中断,但是,我在计数的时候,当要被捕获的信号的周期大于定时器的最长定时时,定时器就会溢出,产生更新中断,所以会用到
  1. if (TIM_GetITStatus(GENERAL_TIM2,TIM_IT_Update) != RESET)
  2.         {
  3.                 TIM_ClearITPendingBit ( GENERAL_TIM2, TIM_FLAG_Update );
  4.         }
复制代码
这个更新中断,用于判断定时溢出的次数,但是这个 更新中断是对 TIM2 这个定时器有效的,也就是说,对每个测量通道都有效啊,那我假如同时测两个信号频率的时候,肯定会用到两个通道,这样的话更新中断就乱了,不知道是哪个产生的更新中断诶,请问这要怎么解决啊,谢谢~

QQ截图20170722103248.jpg
QQ截图20170722103337.jpg
回复

使用道具 举报

发表于 2017-7-25 10:27:17 | 显示全部楼层
用四个定时器            ,每个定时器的资源都是完全独立的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-28 17:08:51 | 显示全部楼层
fire 发表于 2017-7-25 10:27
用四个定时器            ,每个定时器的资源都是完全独立的。

嗯嗯,谢谢火哥。比赛用的C6T8单片机引脚还有资源都有限,所以没办法只能用一个定时器了。我把你的那个例程更优化了下,可以用一个通用定时器的四个通道同时测两路频率,两路占空比。还比较准确。

火哥的那个例程我想给一点不成熟的意见,就是你用的那个程序里面 ,while(1)的结构里面用了Finish_Flag = 1的条件读取,但是假如在读取的过程中,再次进入中断,测到一次数据,就会破坏原来的数据,可以在中断里面做个判断,当已经在中断外读取了一次测频率或者是占空比的数据之后,才会继续读取数据,这样也会防止频繁接入终端导致数据破坏,测量高频的时候也不会导致单片机一直卡死在中断不运行了。
回复 支持 反对

使用道具 举报

发表于 2017-7-28 17:21:07 | 显示全部楼层
Dandri 发表于 2017-7-28 17:08
嗯嗯,谢谢火哥。比赛用的C6T8单片机引脚还有资源都有限,所以没办法只能用一个定时器了。我把你的那个例 ...

很好,讲的很有道理。
回复 支持 反对

使用道具 举报

发表于 2017-7-28 17:32:38 | 显示全部楼层
Dandri 发表于 2017-7-28 17:08
嗯嗯,谢谢火哥。比赛用的C6T8单片机引脚还有资源都有限,所以没办法只能用一个定时器了。我把你的那个例 ...

把你程序传上来 看看  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-28 17:52:17 | 显示全部楼层
fire 发表于 2017-7-28 17:32
把你程序传上来 看看

就是这个,用的 TIM2 ,在使用 GENERAL_TIM2_Config(); 初始化配置之后,需要调用 GENERAL_TIM_CH1_ENABLE 开启 IC1 ,GENERAL_TIM_CH2_ENABLE 开启 IC2 ,通道1和通道2 测量频率,通道3和通道4测量占空比,GENERAL_TIM2_Measure(uint16_t TIM_Channel) 可以直接返回测量结果,希望火哥指点指点

tim.zip

5.56 KB, 下载次数: 113

回复 支持 反对

使用道具 举报

发表于 2017-12-12 09:38:37 | 显示全部楼层
楼主能不能把整套工程都发出来学习一下?
回复 支持 反对

使用道具 举报

发表于 2017-12-13 13:22:26 | 显示全部楼层
本帖最后由 wxyz 于 2017-12-13 13:23 编辑

想用stm32f103vet同时测量20路外部脉冲计数,脉冲的频率在100KHz左右,测量计数误差希望小于千分之五,不知道能否实现?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-17 06:17 , Processed in 0.070644 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表