打印
[应用相关]

请教通用定时器中计数器的溢出标志

[复制链接]
7269|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
george3023|  楼主 | 2010-5-8 12:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟想用TIM3的CH1来捕获脉冲,奈何计数器TIM3_CNT只有16位,72M主频时低于1.1KHz的脉冲就捕获不到,想用上计数器的溢出标志进行补充,扩大捕获周期,看了下资料没找到计数器的溢出标志,还请高手指点,谢谢。
沙发
george3023|  楼主 | 2010-5-9 10:56 | 只看该作者
我是想在每次溢出时进行计数,计算脉冲频率的时候结合定时器的溢出次数和当前的捕获值,脉冲计算完成后清溢出计数,这样就可以捕获周期比较长的脉冲,然后又不用分频损失精度,只是看定时器的那些标志位有些晕乎,不知道怎样能实现我的要求,还请高手指点!

使用特权

评论回复
板凳
dfsa| | 2010-5-9 15:08 | 只看该作者
计数器的溢出标志在定时器里面肯定是有的,在仔细看下DATASHEET

使用特权

评论回复
地板
george3023|  楼主 | 2010-5-9 16:50 | 只看该作者
经过一段时间的调试还发现定时器有丢失捕获标志的现象,勘误表里面也有提到,做个32位计数器多好啊!!!

使用特权

评论回复
5
ST_ARM| | 2010-5-10 10:54 | 只看该作者
update(更新)标志就是计数器的溢出标志!

使用特权

评论回复
6
george3023|  楼主 | 2010-5-10 15:42 | 只看该作者
现在发现一个致命问题,溢出计数和脉冲捕获相结合的方式要求每次捕获发生时都能捕捉到,因为我在计算输入脉冲的时候对溢出计数清零,如果捕获事件发生了5次,程序中仅捕捉到3次(采用查询的方式),计算脉冲就会出现错误,除非是程序采取中断方式进行捕捉,但高频脉冲输入时,频繁的中断显然是极大的开销,会影响其他重要事件的执行力度(eg:PWM输出)。

使用特权

评论回复
7
香水城| | 2010-5-10 16:51 | 只看该作者
高频脉冲输入时,怎么会有计数溢出呢?既然有计数溢出,就不可能有频繁的中断。

请讲清楚你的真正需求。

使用特权

评论回复
8
司徒老鹰| | 2010-5-10 22:58 | 只看该作者
学习了

使用特权

评论回复
9
george3023|  楼主 | 2010-5-12 19:48 | 只看该作者
7# 香水城
外部脉冲输入不是我能控制的啊,我需要捕获1Hz~50KHz的脉冲。

使用特权

评论回复
10
xsgy123| | 2010-5-12 20:36 | 只看该作者
这个频率范围是有点大,1HZ肯定要溢出了,建议加个倍频电路,不然定时器可能要溢出N次了

使用特权

评论回复
11
香水城| | 2010-5-12 21:09 | 只看该作者
50kHz的周期是20us,这个时间对于STM32的72MHz主频来说并不算快,不会有你说的频繁中断问题。

使用特权

评论回复
12
george3023|  楼主 | 2010-5-13 10:07 | 只看该作者
11# 香水城
us级的中断是不被允许的,会影响产品性能。

使用特权

评论回复
13
xuyiyi| | 2010-5-13 10:17 | 只看该作者
同意 11楼:香水城 的观点。
  我以前在普通的89C51上用过50us定时中断,外接晶振是11.0592,  执行最快的单字节指令也要1us多,现在的STM32的72MHz主频,执行一条指令要比那时的51快N倍,20us的中断频率应该可行,不会有你说的频繁中断问题。

使用特权

评论回复
14
george3023|  楼主 | 2010-5-14 08:52 | 只看该作者
13# xuyiyi
不知道你的产品用在什么地方,对可靠性要求有多高,我这个要用在工业控制领域,除了性能需要的中断,其他地方都不允许使用中断。

使用特权

评论回复
15
香水城| | 2010-5-14 21:55 | 只看该作者
每20us产生一次中断,你的可靠性都保证不了,那么怎么样的硬件环境才能满足你的要求呢?即使是使用32位的定时器,也不能避免每20us产生一次中断呀,难道使用32位的定时器你有什么高招避免频繁中断?

使用特权

评论回复
16
george3023|  楼主 | 2010-5-15 10:23 | 只看该作者
32位的定时器我直接采用查询的方式计算脉宽就行了,也就是说中断是留给跟性能相关的功能使用,像脉冲捕获这些功能还有串口通讯这些都是不能使用中断的。

使用特权

评论回复
17
george3023|  楼主 | 2010-5-15 10:35 | 只看该作者
用中断是最省事的方式,什么功能都使用中断,系统的核心性能如何保障,这个是做产品不得不面对的问题。

使用特权

评论回复
18
george3023|  楼主 | 2010-5-15 10:45 | 只看该作者
5# ST_ARM
谢谢5楼的指点,另外还需设置updata标志的触发源,以我为例,需要在计数器上溢时产生updata标志。
TIM_UpdateRequestConfig(TIM3, TIM_UpdateSource_Regular);
#define TIM_UpdateSource_Regular           ((uint16_t)0x0001) /*!< Source of update is counter overflow/underflow. */

使用特权

评论回复
19
香水城| | 2010-5-15 11:01 | 只看该作者
32位的定时器我直接采用查询的方式计算脉宽就行了,也就是说中断是留给跟性能相关的功能使用,像脉冲捕获这些功能还有串口通讯这些都是不能使用中断的。 ...
george3023 发表于 2010-5-15 10:23


如果采用查询的方式可以解决问题,溢出标志也可以使用查询方式呀,为什么一定要用中断呢?

使用特权

评论回复
20
george3023|  楼主 | 2010-5-15 11:14 | 只看该作者
关键是我在6楼提到的问题,查询的时候会有漏掉捕获事件的问题,造成计算脉冲错误。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

68

帖子

1

粉丝