搜索
bottom↓
回复: 11

stm32f4的dma传输次数怎样超过65535且过程连续?

[复制链接]

出5入4汤圆

发表于 2020-9-1 13:43:08 来自手机 | 显示全部楼层 |阅读模式
100汤圆
最近使用timer的pwm配合dma来控制发送脉冲的个数,但是在电机控制场景,一次仅能发送65535
个脉冲肯定不够用的,假设我现在需要发送65535+1000个脉冲,如何做到呢?
经过查阅资料,f4的dma有双缓冲模式,传输自动切换但传输过程无法改变dma的传输次数。
循环模式,似乎也不适合我。
那就只剩下一种最原始的办法,但是原理上就感觉有问题。发送完第一波65535个脉冲之后进去dma发送完成中断,然后不关闭timer重新配置dma自己,发送剩余的1000个脉冲,该等1000个脉冲发完再次进dma完成中断然后关闭timer。
各位有更好的办法吗?

最佳答案

查看完整内容

我这么想的,不要借助DMA的计数。把DMA配置为循环并开启半传输中断和完成中断,每次循环传输100个脉冲,如果你要发送70060个脉冲,就在最后的60个脉冲之前,把buf数据中后续的40个数据改为输出占空比为0的数据。

出870入263汤圆

发表于 2020-9-1 13:43:09 | 显示全部楼层
tim4146 发表于 2020-9-1 15:57
就算能改buff数据,dma传输的次数这个寄存器在工作过程中不让改的,那就无法精准控制脉冲的个数 ...

我这么想的,不要借助DMA的计数。把DMA配置为循环并开启半传输中断和完成中断,每次循环传输100个脉冲,如果你要发送70060个脉冲,就在最后的60个脉冲之前,把buf数据中后续的40个数据改为输出占空比为0的数据。

出0入0汤圆

发表于 2020-9-1 14:05:40 | 显示全部楼层
很久没用过了,传输过程中可以修改buff里面的数据吗? 我印象中好像有个传输一半的中断,发生传输一半的中断后,修改前一半的buff数据,循环模式。如果不能在传输过程中修改的话,那就行不通了。

出5入4汤圆

 楼主| 发表于 2020-9-1 15:57:23 来自手机 | 显示全部楼层
就算能改buff数据,dma传输的次数这个寄存器在工作过程中不让改的,那就无法精准控制脉冲的个数

出15入178汤圆

发表于 2020-9-1 16:50:57 | 显示全部楼层
有过类似的需求,之前DAC输出波形,供你参考。我使用环形缓冲,动态更新内存实现波形变化

出0入0汤圆

发表于 2020-9-1 17:12:21 来自手机 | 显示全部楼层
dma循环模式,缓存区分上下两页,主程序查询进展,上下页缓存后更新数据,直到最后一页设成指定长度。

出0入22汤圆

发表于 2020-9-1 17:59:39 | 显示全部楼层
只用脉冲,不管占空比的话,DMA+spi,用CLK输出最大65536*8个脉冲,用MOSI输出可以65536*4个脉冲

出5入4汤圆

 楼主| 发表于 2020-9-1 20:40:19 来自手机 | 显示全部楼层
appleboy 发表于 2020-9-1 17:12
dma循环模式,缓存区分上下两页,主程序查询进展,上下页缓存后更新数据,直到最后一页设成指定长度。 ...

dma.工作过程中是不能改发送次数寄存器的,且这个寄存器是上下两片共用的

出0入0汤圆

发表于 2020-9-2 23:08:25 来自手机 | 显示全部楼层
jiaowoxiaolu 发表于 2020-9-1 17:59
只用脉冲,不管占空比的话,DMA+spi,用CLK输出最大65536*8个脉冲,用MOSI输出可以65536*4个脉冲{:t ...

spi不能任意分频的  倒是同步串口分频自由 但是最高速度要低很多

出0入0汤圆

发表于 2020-9-2 23:19:20 来自手机 | 显示全部楼层
最后一段补几个0  及时关闭

出5入4汤圆

 楼主| 发表于 2020-9-3 21:59:03 来自手机 | 显示全部楼层
armstrong 发表于 2020-9-2 07:42
我这么想的,不要借助DMA的计数。把DMA配置为循环并开启半传输中断和完成中断,每次循环传输100个脉冲, ...

前天想到了另一个方案,不采用大批量脉冲发送,而是每个插补周期单独计算,让dma小包小包发送,即假设插补周期10ms,发送过程中我保证一次计算,并把数据准备好,等脉冲发完,在dma发送完成中断中根据准备好的参数配置dma进行下一次10ms的发送,特殊情况是较低频率输出下有时候一个插补周期需要发送的脉冲数是0个,就把占空比搞成0%,然后就能假装发送以便不让dma上述流程断掉。今天已经完成一个指令了,明天把梯形加减速指令做起来试试看。兄弟你的思路也是比较精妙的。最佳给你了!

出0入0汤圆

发表于 2020-9-3 22:55:19 | 显示全部楼层
学习一下。DMA双缓冲
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 08:34

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表