我使用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);
测试用的工程文件:
因为start DMA会重新初始化dma的配置,你可以看一下代码,初始化dma在这个函数里,你试试这样
HAL_TIM_IC_Start_DMA(&htim2,TIM_CHANNEL_1|TIM_CHANNEL_2,cp1,20);
引用: huo_hu 发表于 2019-7-19 10:32 因为start DMA会重新初始化dma的配置,你可以看一下代码,初始化dma在这个函数里,你试试这样 HAL_TIM_IC_S ...
看这个函数介绍应该是不能这样做,从函数内部switch来看同时也只能处理一个通道,而且完一个通道后就直接break了,不会对另一个通道进行配置
引用: wdliming 发表于 2019-8-14 21:25
楼主解决了吗??
引用: littleshrimp 发表于 2019-8-14 22:15 没解决 查了很多资料 好像DMA方式好像只能开启一个通道
一个定时器一个通道是吧,那我用两个定时器来捕获两个独立的通道,应该可以的吧~~
比如tim5 ch1 tim2 ch2这样是可以的吧
还想请问一下 ,这个dma来取读的方式是不是会节约cpu运行时间的?因为用中断方式的话,会频繁进中断,dma是不是不会频繁进中断?我看你是使用normal模式的,那我是不是可以每100ms调用HAL_TIM_IC_Start_DMA,意味着硬件始终是在采样频率的,只是我数据搬运是100一次,可以这么理解?
还是说dma数据一值搬运,搬运到100个数据后,dma触发中断,中断结束了,等下次调用HAL_TIM_IC_Start_DMA再次开启数据搬运,请问哪个理解是对的??
还望多多指教谢谢~~
引用: wdliming 发表于 2019-8-15 09:27
还想请问一下 ,这个dma来取读的方式是不是会节约cpu运行时间的?因为用中断方式的话,会频繁进中断,dma是 ...
引用: wdliming 发表于 2019-8-15 08:51
一个定时器一个通道是吧,那我用两个定时器来捕获两个独立的通道,应该可以的吧~~
比如tim5 ch1 tim2 ...
引用: wdliming 发表于 2019-8-15 08:51
一个定时器一个通道是吧,那我用两个定时器来捕获两个独立的通道,应该可以的吧~~
比如tim5 ch1 tim2 ...
引用: littleshrimp 发表于 2019-8-14 22:15 没解决 查了很多资料 好像DMA方式好像只能开启一个通道
那我用定时器5通道1,定时器2通道2,可以可以开启吗??
引用: wdliming 发表于 2019-8-15 10:38
那我用定时器5通道1,定时器2通道2,可以可以开启吗??
引用: littleshrimp 发表于 2019-8-15 11:12 你是说同时开启吗?
对呀,因为我也有两个通道需要采样频率的,但是可以不用一个定时器
引用: littleshrimp 发表于 2019-8-15 10:19 数组长度是要捕获的次数 如果是单通道使用DMA可以单次捕获(捕获到DMA数据长度后停止)也可以是循环捕获 ...
嗯嗯,是得
我就是只采样频率,如果用两个定时器来分别对两个独立的引脚进行采样,好上面我说的,dma可以同时开启吗?还是说也只能一个DMA呢?
引用: wdliming 发表于 2019-8-15 11:30
嗯嗯,是得
我就是只采样频率,如果用两个定时器来分别对两个独立的引脚进行采样,好上面我说的,dma ...
引用: littleshrimp 发表于 2019-8-17 12:28 可以同时开启
谢谢,已经试过了。ok的