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

mfsmfs   2010-5-8 12:19 楼主
                                 小弟想用TIM3的CH1来捕获脉冲,奈何计数器TIM3_CNT只有16位,72M主频时低于1.1KHz的脉冲就捕获不到,想用上计数器的溢出标志进行补充,扩大捕获周期,看了下资料没找到计数器的溢出标志,还请高手指点,谢谢。

回复评论 (25)

                                 我是想在每次溢出时进行计数,计算脉冲频率的时候结合定时器的溢出次数和当前的捕获值,脉冲计算完成后清溢出计数,这样就可以捕获周期比较长的脉冲,然后又不用分频损失精度,只是看定时器的那些标志位有些晕乎,不知道怎样能实现我的要求,还请高手指点!
点赞  2010-5-9 10:56
                                 计数器的溢出标志在定时器里面肯定是有的,在仔细看下DATASHEET
点赞  2010-5-9 15:08
                                 经过一段时间的调试还发现定时器有丢失捕获标志的现象,勘误表里面也有提到,做个32位计数器多好啊!!!
点赞  2010-5-9 16:50
                                 update(更新)标志就是计数器的溢出标志!
点赞  2010-5-10 10:54
                                 现在发现一个致命问题,溢出计数和脉冲捕获相结合的方式要求每次捕获发生时都能捕捉到,因为我在计算输入脉冲的时候对溢出计数清零,如果捕获事件发生了5次,程序中仅捕捉到3次(采用查询的方式),计算脉冲就会出现错误,除非是程序采取中断方式进行捕捉,但高频脉冲输入时,频繁的中断显然是极大的开销,会影响其他重要事件的执行力度(eg:PWM输出)。
点赞  2010-5-10 15:42
高频脉冲输入时,怎么会有计数溢出呢?既然有计数溢出,就不可能有频繁的中断。

请讲清楚你的真正需求。
点赞  2010-5-10 16:51
                                 学习了
点赞  2010-5-10 22:58

外部脉冲输入不是我能控制的啊,我需要捕获1Hz~50KHz的脉冲。
点赞  2010-5-12 19:48
                                 这个频率范围是有点大,1HZ肯定要溢出了,建议加个倍频电路,不然定时器可能要溢出N次了
点赞  2010-5-12 20:36
                                 50kHz的周期是20us,这个时间对于STM32的72MHz主频来说并不算快,不会有你说的频繁中断问题。
点赞  2010-5-12 21:09

us级的中断是不被允许的,会影响产品性能。
点赞  2010-5-13 10:07
同意 11楼:版主 的观点。
  我以前在普通的89C51上用过50us定时中断,外接晶振是11.0592,  执行最快的单字节指令也要1us多,现在的STM32的72MHz主频,执行一条指令要比那时的51快N倍,20us的中断频率应该可行,不会有你说的频繁中断问题。
点赞  2010-5-13 10:17

不知道你的产品用在什么地方,对可靠性要求有多高,我这个要用在工业控制领域,除了性能需要的中断,其他地方都不允许使用中断。
点赞  2010-5-14 08:52
                                 每20us产生一次中断,你的可靠性都保证不了,那么怎么样的硬件环境才能满足你的要求呢?即使是使用32位的定时器,也不能避免每20us产生一次中断呀,难道使用32位的定时器你有什么高招避免频繁中断?
点赞  2010-5-14 21:55
                                 32位的定时器我直接采用查询的方式计算脉宽就行了,也就是说中断是留给跟性能相关的功能使用,像脉冲捕获这些功能还有串口通讯这些都是不能使用中断的。
点赞  2010-5-15 10:23
                                 用中断是最省事的方式,什么功能都使用中断,系统的核心性能如何保障,这个是做产品不得不面对的问题。
点赞  2010-5-15 10:35

谢谢5楼的指点,另外还需设置updata标志的触发源,以我为例,需要在计数器上溢时产生updata标志。
TIM_UpdateRequestConfig(TIM3, TIM_UpdateSource_Regular);
#define TIM_UpdateSource_Regular           ((uint16_t)0x0001) /*!< Source of update is counter overflow/underflow. */
点赞  2010-5-15 10:45
32位的定时器我直接采用查询的方式计算脉宽就行了,也就是说中断是留给跟性能相关的功能使用,像脉冲捕获这些功能还有串口通讯这些都是不能使用中断的。 ...
如果采用查询的方式可以解决问题,溢出标志也可以使用查询方式呀,为什么一定要用中断呢?
点赞  2010-5-15 11:01
                                 关键是我在6楼提到的问题,查询的时候会有漏掉捕获事件的问题,造成计算脉冲错误。
点赞  2010-5-15 11:14
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复