TIM2输入捕获中断时去读TIM5定时器的值会出错?

2019-07-20 07:47发布

如题,我将TIM2、TIM5都设置为输入捕获(TIM5就是按照原子哥实验的那个例程,一模一样的代码),然后TIM2和TIM5好像也都一样。所以我也是基本拷贝的。用的引脚是:TIM5CH1--PA0,TIM2CH1--PA5
唯一不同的是在TIM2捕获到上升沿时的中断处理函数里去读TIM5->CCR1的值。因为我想TIM5->CCR1清零的时候是TIM5捕获到PA0输入信号的上升沿,TIM2中断也是捕获到PA5输入信号的上升沿,都是上升沿,相差之值就是时间差,时间差/周期*360就是相位差了。


实际结果是1000Hz的方波输入,TIM5、TIM2都能单独测出其周期,TIM5下降沿中断时去读TIM5->CCR1的值大概是500,但是TIM2上升沿中断时去读竟然是895391,十万数量级的。。。完全不知道什么情况
按照1MHz的初始化频率,895391完全没有可能出现啊。
不知道这是为什么,是只有中断时才能读CCR1?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
在LS参考系
1楼-- · 2019-07-20 12:46
已解决,是读TIMx->CNT的值
哈哈哈哈
l68715553
2楼-- · 2019-07-20 13:51
 精彩回答 2  元偷偷看……
在LS参考系
3楼-- · 2019-07-20 18:42
 精彩回答 2  元偷偷看……
l68715553
4楼-- · 2019-07-20 21:34
在LS参考系 发表于 2018-6-10 22:36
我的情况是在不是TIM2捕获中断的时候去读了TIM2-CCR1的值,这样会出问题,因为TIM2-CCR1的值只有在TIM2捕 ...

好的,谢谢你的解答。我的情况和你不一样,每次读取都是在中断之后,此时CCR1已经有了CNT的值。我碰到的问题是:在算频率,a1=第一次捕获值时间,a2=某次捕获时间,频率=pclk/(a2-a1)*(捕获次数-1),时间差里已经算进了捕获时的溢出次数,所以肯定不会有问题。PCLK为晶振值=1000000。碰到的情况是:经常不经意的频率会变成1000多甚至更大,最常出现3906.25HZ这个值。实际情况只有2、3这样。一般这个计算公式,每3次捕获我就会刷新重新第一个开始,所以捕获次数=3,(a2-a1)=512.最后算出来这个512到底有什么含义?是哪里溢出的关系吗?

一周热门 更多>