F4定时器多通道输入捕获

2019-07-20 06:09发布

现在是想用TIM3的通道1-4捕获遥控器接收机的4个通道的pwm,测量其脉宽。既然是多通道,就在原子哥的输入捕获源码上修改了一下,在捕获中断中不进行定时器清零操作,而是记录下上升沿到来时的CNT值,最后计算的值是0xFFFF*溢出次数+下降沿时的CNT值-上升沿时的CNT值,但是只使用一个通道时就会隔一段时间出现很大的一个数,若同时打开两个通道就更混乱了,找不出问题困扰了好久~求大神解答。还有怎么用HAL库判断定时器捕获中断是来自哪一个通道的??if条件是什么
1.png 捕获中断 捕获中断 主函数 主函数 串口打印数据 串口打印数据
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
edmund1234
1楼-- · 2019-07-20 11:39
本帖最后由 edmund1234 于 2018-9-12 16:20 编辑

这原因很明显, 当ARR溢出前捕获一个值, ARR溢出后捕获一个值, 两值双减, 自然就得到这错误的大数值了
解决方法
Cycle_Val = (TIM_Cap_Val - TIM_Cap_LastVal + Arr+1)% (Arr+1);

ultraelec
2楼-- · 2019-07-20 13:57
 精彩回答 2  元偷偷看……
柠檬C
3楼-- · 2019-07-20 18:52
edmund1234 发表于 2018-9-12 16:18
这原因很明显, 当ARR溢出前捕获一个值, ARR溢出后捕获一个值, 两值双减, 自然就得到这错误的大数值了
...

非常感谢,用这个公式后数值就没有问题了,可是我之前的式子也加上了ARR的值了,ARR-Val+LastVal感觉理论上应该对的呀
edmund1234
4楼-- · 2019-07-20 19:53
柠檬C 发表于 2018-9-12 16:58
非常感谢,用这个公式后数值就没有问题了,可是我之前的式子也加上了ARR的值了,ARR-Val+LastVal感觉理论 ...

别只看答案, 要去理解为啥公式要这样写
码农某个情度象个医生, 专医代码
如果说只是死记答案, 感冒就吃什么药, 头痛就吃什么药, 完全不管背后的病理, 那肯定不是个好医生, 没碰到过的病就只能靠百度了
如果你真的去理解这公式的背后原理, 你刚刚提的问题是你完全可以解决了
柠檬C
5楼-- · 2019-07-20 20:48
 精彩回答 2  元偷偷看……
edmund1234
6楼-- · 2019-07-21 02:05
柠檬C 发表于 2018-9-12 17:35
现在的问题是不能多通道捕获,不知道怎么判断捕获中断是来自哪一个通道的,以至于两个通道一开启数值就都 ...

除了初始外设外, 不用库, 用也只用STD的库, HAL没用过

一周热门 更多>