打印

关于STM32定时器输入捕获溢出

[复制链接]
9806|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kisara203|  楼主 | 2012-5-4 11:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有个问题困扰我很久了,想请教版主。

     我用的TIM输入捕获测方波频率,用的是复位模式,检测到上升沿后产生中断,然后读CCR,更新计数器。

     由于频率范围较大,为了保证高频时的精度,预分频不能设置太大,但是低频就会出现计数器溢出导致测量不准。

     看了很多帖子,说用检测中断标志的办法来判断到底是溢出中断还是捕获中断,但我实验时发现捕获时同时也会产生溢出更新中断。

     请教版主有没有什么好方法能检测计数器的溢出呢?
沙发
香水城| | 2012-5-4 11:39 | 只看该作者
用溢出中断检测计数器的溢出。

使用特权

评论回复
板凳
airwill| | 2012-5-4 12:38 | 只看该作者
用溢出中断累计溢出次数作为计数器的高位;
用结连方式将 2 个定时器组成 32 位.

使用特权

评论回复
地板
kisara203|  楼主 | 2012-5-4 12:40 | 只看该作者
溢出中断就是更新中断呀,是DIER寄存器的第0位,捕获的时候即使没有溢出,也会自动更新,导致发生更新中断,还是没法识别。。这怎么办

使用特权

评论回复
5
香水城| | 2012-5-4 14:44 | 只看该作者
溢出中断就是更新中断呀,是DIER寄存器的第0位,捕获的时候即使没有溢出,也会自动更新,导致发生更新中断,还是没法识别。。这怎么办
kisara203 发表于 2012-5-4 12:40


首先,不要配置从模式控制器在捕获成功时复位计数器,这样就不会在收到捕获中断的同时出现溢出中断。

其次,你需要把ARR参数配置为其最大值0xFFFF,这样可以得到最少的溢出中断。

这样配置后,如果在中断程序中发现捕获中断与溢出中断同时出现,则可能有下述两种情况:
1)捕获中断先于溢出中断出现:此时读出的捕获数值CCR应该是一个接近0xFFFF的数值,这样测量的周期就是(溢出中断累计次数*0x10000+CCR)。
2)捕获中断晚于溢出中断出现:此时读出的捕获数值CCR应该是一个接近于0的数值,这样测量的周期就是((溢出中断累计次数+1)*0x10000+CCR)。

使用特权

评论回复
6
kisara203|  楼主 | 2012-5-4 16:21 | 只看该作者
谢谢版主指点。 但是我还是有疑问,不用复位模式的话,只有门控模式和触发模式可以选择,感觉这两种模式难以用于频率测量啊。

使用特权

评论回复
7
chenjiancan| | 2013-5-12 21:39 | 只看该作者
kisara203 发表于 2012-5-4 16:21
谢谢版主指点。 但是我还是有疑问,不用复位模式的话,只有门控模式和触发模式可以选择,感觉这两种模式难 ...

请问lz解决此问题了没有,这几天一直搞这个问题 搞不定,如果不用复位模式,改怎么写程序。

使用特权

评论回复
8
lzhp1999| | 2013-5-21 13:42 | 只看该作者
香水城 发表于 2012-5-4 14:44
首先,不要配置从模式控制器在捕获成功时复位计数器,这样就不会在收到捕获中断的同时出现溢出中断。

其 ...

如果触发中断和溢出中断一起出现呢?怎么区分?

使用特权

评论回复
9
Q85038427| | 2014-11-18 10:23 | 只看该作者
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE);
从模式控制器:TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Trigger);
中断源里面可以查到 :TIM_GetITStatus(TIM2 , TIM_IT_CC2) != RESET
但是溢出中断查不到,请教是怎么回事?

使用特权

评论回复
10
Q85038427| | 2014-11-18 10:24 | 只看该作者
香水城 发表于 2012-5-4 14:44
首先,不要配置从模式控制器在捕获成功时复位计数器,这样就不会在收到捕获中断的同时出现溢出中断。

其 ...


TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE);
从模式控制器:TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Trigger);
中断源里面可以查到 :TIM_GetITStatus(TIM2 , TIM_IT_CC2) != RESET
但是溢出中断查不到,请教是怎么回事?

使用特权

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

本版积分规则

0

主题

3

帖子

1

粉丝