[STM32F4] 两个 DMA 是否可以并行工作而不竞争总线?

[复制链接]
787|14
 楼主| cutfall 发表于 2025-5-28 20:43 | 显示全部楼层 |阅读模式
两个 DMA 模块是否可以在不争夺总线的情况下同时工作?
例如:
BusMatrix.png文件中,可以看到 DMA1 和 DMA2 都连接了 SRAM1、SRAM2、AHB1 外设和 AHB2 外设。
如果我将 DMA1设置为从 ADC1(在 Connections.png 中所示的 AHB2总线中)获取数据到 SRAM2,并将 DMA2设置为从 SRAM1到 USART1(在 Connections.png 中所示的 AHB1 总线中)获取数据,这两个 DMA 是否会竞争成为总线的主控?还是他们要同时工作而不互相打扰?
如果是这样,当 DMA1不用时,是否可以将 ADC 部件移动到 DMA2以释放 DMA1中的一些带宽?

烟雨蒙蒙520 发表于 2025-5-31 23:20 | 显示全部楼层
如果你使用的是 STM32H7 或 STM32G4 系列,有 DMAMUX,你就可以将 ADC 的 request route 到 DMA2,这样就能“释放”DMA1。
烟雨蒙蒙520 发表于 2025-5-31 23:20 | 显示全部楼层
一般没必要切换,除非 DMA1 带宽不足,或 DMA channel 紧张
光辉梦境 发表于 2025-6-9 12:00 | 显示全部楼层
STM32F4的BusMatrix是一个仲裁器,用于管理多个总线主控(如DMA、CPU、外设等)对共享总线(如AHB1、AHB2、SRAM等)的访问。
别乱了阵脚 发表于 2025-6-9 13:42 | 显示全部楼层
BusMatrix通过仲裁机制(如轮询、优先级等)确保多个主控可以高效地访问总线,而不会导致死锁或长时间阻塞
暖了夏天蓝了海 发表于 2025-6-9 14:00 | 显示全部楼层
DMA1和DMA2是独立的DMA模块,它们可以同时发起总线请求
江河千里 发表于 2025-6-9 16:00 | 显示全部楼层
BusMatrix会仲裁这些请求,确保它们可以并行工作,而不会直接竞争总线
三生万物 发表于 2025-6-9 17:00 | 显示全部楼层
一般来说,BusMatrix会根据仲裁规则(如优先级、轮询等)决定哪个主控可以访问总线
一秒落纱 发表于 2025-6-9 20:00 | 显示全部楼层
由于DMA1和DMA2访问的是不同的总线(AHB2和AHB1)和存储器(SRAM2和SRAM1),它们可以并行工作,而不会直接竞争总线。BusMatrix会确保它们可以高效地访问总线
淡漠安然 发表于 2025-6-10 12:00 | 显示全部楼层
如果DMA1和DMA2同时发起请求,BusMatrix会根据仲裁规则选择其中一个。
冰春彩落下 发表于 2025-6-10 20:00 | 显示全部楼层
只有在总线负载非常高时,才可能出现短暂的仲裁延迟
远山寻你 发表于 2025-6-11 12:00 | 显示全部楼层
DMA1 从 ADC1(AHB2)到 SRAM2:DMA1作为总线主控,从AHB2总线上的ADC1读取数据,并写入SRAM2。DMA2 从 SRAM1 到 USART1(AHB1):DMA2作为总线主控,从SRAM1读取数据,并写入AHB1总线上的USART1
夜阑风雨 发表于 2025-6-12 12:00 | 显示全部楼层
由于STM32F4的BusMatrix设计,DMA1和DMA2可以在大多数情况下并行工作,而不会互相干扰
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

54

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部