[求助] 为什么用STM32的TIMER捕获 DMA只有一个通道有数据

littleshrimp   2019-7-18 14:40 楼主

我使用cubemx配置timer的通道1和通道2为捕获模式

2个通道使用类似的DMA配置

 

现在的问题是如果我使用下边的两行代码,触发后cp2数据里没有数据

如果注释掉第一行cp2才有数据,感觉2个通道不能同时捕获,是我的代码哪里配置不正确吗?

  HAL_TIM_IC_Start_DMA(&htim2,TIM_CHANNEL_1,cp1,20);
  HAL_TIM_IC_Start_DMA(&htim2,TIM_CHANNEL_2,cp2,20);

QQ图片20190718143411.png

 

 

QQ图片20190718143438.png

测试用的工程文件:

BB.rar (9.28 MB)
(下载次数: 130, 2019-7-18 14:40 上传)

 

虾扯蛋,蛋扯虾,虾扯蛋扯虾

回复评论 (44)

因为start DMA会重新初始化dma的配置,你可以看一下代码,初始化dma在这个函数里,你试试这样

HAL_TIM_IC_Start_DMA(&htim2,TIM_CHANNEL_1|TIM_CHANNEL_2,cp1,20);

点赞  2019-7-19 10:32
引用: huo_hu 发表于 2019-7-19 10:32 因为start DMA会重新初始化dma的配置,你可以看一下代码,初始化dma在这个函数里,你试试这样 HAL_TIM_IC_S ...

看这个函数介绍应该是不能这样做,从函数内部switch来看同时也只能处理一个通道,而且完一个通道后就直接break了,不会对另一个通道进行配置

虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2019-7-19 12:25
楼主解决了吗??
点赞  2019-8-14 21:25
引用: wdliming 发表于 2019-8-14 21:25
楼主解决了吗??

没解决 查了很多资料 好像DMA方式好像只能开启一个通道
点赞  2019-8-14 22:15
引用: littleshrimp 发表于 2019-8-14 22:15 没解决 查了很多资料 好像DMA方式好像只能开启一个通道

一个定时器一个通道是吧,那我用两个定时器来捕获两个独立的通道,应该可以的吧~~

比如tim5 ch1 tim2 ch2这样是可以的吧

点赞  2019-8-15 08:51
想请问一下,你cp1的数组里面为何是100大小,那ccp1的值是读取cp1[0]吗??
点赞  2019-8-15 09:13

还想请问一下 ,这个dma来取读的方式是不是会节约cpu运行时间的?因为用中断方式的话,会频繁进中断,dma是不是不会频繁进中断?我看你是使用normal模式的,那我是不是可以每100ms调用HAL_TIM_IC_Start_DMA,意味着硬件始终是在采样频率的,只是我数据搬运是100一次,可以这么理解?

还是说dma数据一值搬运,搬运到100个数据后,dma触发中断,中断结束了,等下次调用HAL_TIM_IC_Start_DMA再次开启数据搬运,请问哪个理解是对的??

还望多多指教谢谢~~

点赞  2019-8-15 09:27
引用: wdliming 发表于 2019-8-15 09:27
还想请问一下 ,这个dma来取读的方式是不是会节约cpu运行时间的?因为用中断方式的话,会频繁进中断,dma是 ...

数组长度是要捕获的次数
如果是单通道使用DMA可以单次捕获(捕获到DMA数据长度后停止)也可以是循环捕获,写满以后重头在写
中断方式如果输入信号频率不高影响不大
我的会有非常高频的信号
因为中断读取捕获数据需要处理时间
如果上一次捕获数据还没处理好又来一次数据就会出问题
点赞  2019-8-15 10:19
引用: wdliming 发表于 2019-8-15 08:51
一个定时器一个通道是吧,那我用两个定时器来捕获两个独立的通道,应该可以的吧~~

比如tim5 ch1 tim2  ...

这个要看你的要求 我的需要计算几个通道间的时差 一个定时器的多个通道会使用一个计数器 容易计算
两个定时器计数就需要同步 否则没法算时差
点赞  2019-8-15 10:22
引用: wdliming 发表于 2019-8-15 08:51
一个定时器一个通道是吧,那我用两个定时器来捕获两个独立的通道,应该可以的吧~~

比如tim5 ch1 tim2  ...

这个要看你的要求 我的需要计算几个通道间的时差 一个定时器的多个通道会使用一个计数器 容易计算
两个定时器计数就需要同步 否则没法算时差
点赞  2019-8-15 10:30
引用: littleshrimp 发表于 2019-8-14 22:15 没解决 查了很多资料 好像DMA方式好像只能开启一个通道

那我用定时器5通道1,定时器2通道2,可以可以开启吗??

点赞  2019-8-15 10:38
引用: wdliming 发表于 2019-8-15 10:38
那我用定时器5通道1,定时器2通道2,可以可以开启吗??

你是说同时开启吗?
点赞  2019-8-15 11:12
引用: littleshrimp 发表于 2019-8-15 11:12 你是说同时开启吗?

对呀,因为我也有两个通道需要采样频率的,但是可以不用一个定时器

点赞  2019-8-15 11:27
引用: littleshrimp 发表于 2019-8-15 10:19 数组长度是要捕获的次数 如果是单通道使用DMA可以单次捕获(捕获到DMA数据长度后停止)也可以是循环捕获 ...

嗯嗯,是得

我就是只采样频率,如果用两个定时器来分别对两个独立的引脚进行采样,好上面我说的,dma可以同时开启吗?还是说也只能一个DMA呢?

点赞  2019-8-15 11:30
引用: wdliming 发表于 2019-8-15 11:30
嗯嗯,是得

我就是只采样频率,如果用两个定时器来分别对两个独立的引脚进行采样,好上面我说的,dma ...

可以同时开启
点赞  2019-8-17 12:28
引用: littleshrimp 发表于 2019-8-17 12:28 可以同时开启

谢谢,已经试过了。ok的

点赞  2019-8-17 14:33

 

找到解决办法

https://community.st.com/s/question/0D50X00009XkWIcSAN/multiple-channels-input-capture-at-the-same-time

 

问题解决,测试工程

BB.rar (13.41 MB)
(下载次数: 215, 2019-8-25 17:57 上传)

 

 

虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2019-8-25 17:57
引用: wdliming 发表于 2019-8-14 21:25 楼主解决了吗??

问题解决了

虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2019-8-25 18:02

好的

谢谢,我立马看看~~

点赞  2019-9-17 12:50
123下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复