打印

请教几个关于STM32 DMA的问题。

[复制链接]
6142|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1:如何用DMA同时给2个GPIO口输出数据? 因GPIO口只有16bit,如果要输出32bit宽的数据该如何操作。

2:如何控制DMA传输的速率?比如从内存到GPIO输出,在DMA初始化时没有分频倍数之类的参数,默认是用最快速度传输吗?如何控制速度?

3:DMA传输时,能否同时“计数”?例如我有100个数据从内存传输到GPIO,如果需要传送到第33个数据时产生中断,能否实现?

4:DMA传输有没有“同步”功能?例如我开启2个DMA通道,通道1从内存1传输数据到GPIOA,通道2从内存传输数据到GPIOB,能使这2个DMA传输动作同步进行吗?
沙发
javenreal|  楼主 | 2012-1-3 14:42 | 只看该作者
5: 如果外扩了RAM,可以使用DMA从外扩RAM中向GPIO传输数据吗? 如果可以,这种传输的效率,和MCU片内RAM比能差多少呢?

使用特权

评论回复
板凳
香水城| | 2012-1-3 15:29 | 只看该作者
1)使用2个DMA通道分别对2个GPIO口输出数据。
2)可以用定时器触发DMA控制速率。
3)可以分为2次DMA操作,第1次传送33个数据,第2次传送67个数据。
4)不能,因为所有DMA都要使用相同的内部总线。
5)可以。效率会降低不少,具体降低多少要看其他对外部RAM访问的频次。

使用特权

评论回复
地板
javenreal|  楼主 | 2012-1-3 16:11 | 只看该作者
感谢版主,关于问题(4),是否可以这样理解:

“同时”开启2个DMA通道向不同的GPIO输出,这2个GPIO的数据总是一前一后的?(但是他们之间的间隔很小,相当于同时输出)

如果同时还有DMA进行ADC向内存的传输,这3个DMA之间会有冲突吗? 有没有可能因为ADC的DMA,使得向GPIO输出的2个DMA之间的间隔变大?

关于问题(2),我看到网上用TIM更新DMA的例子,里面有一句:
TIM_DMACmd(TIM3, TIM_DMA_Update, ENABLE);
但是没有看到具体DMA通道和TIM关联的语句,如果有2个DMA都用TIM来更新,可以实现吗?
如果可以实现,是用1个TIM更新2个DMA呢还是用2个TIM分别更新2个DMA?

使用特权

评论回复
5
香水城| | 2012-1-3 17:43 | 只看该作者
对,“同时”开启2个DMA通道向不同的GPIO输出,这2个GPIO的数据总是一前一后的!而且他们之间的间隔不能确定,有其他DMA通道的影响,也有程序相关性的影响。

关于DMA通道的使用,请用可以通过TIM触发的通道,详见参考手册中的对照表。例如,下面的截图圈出了使用TIM4时可用的通道:

STM32_DMA1_Requests.GIF (25.45 KB )

STM32_DMA1_Requests.GIF

使用特权

评论回复
6
菜鸟宅男| | 2013-8-8 11:42 | 只看该作者
学习一下!

使用特权

评论回复
7
wuyong2k| | 2015-6-1 13:40 | 只看该作者
太感谢各位大神了 ,一直纠结DMA怎么触发 现在看懂了 大爱你们!!!

使用特权

评论回复
8
wuyong2k| | 2015-6-1 13:41 | 只看该作者
香水城 发表于 2012-1-3 17:43
对,“同时”开启2个DMA通道向不同的GPIO输出,这2个GPIO的数据总是一前一后的!而且他们之间的间隔不能确 ...

允许我膜拜下香水大神!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

48

帖子

1

粉丝