[STM32H7] DMA传输偶尔中途停住,好像“卡”在半路

[复制链接]
537|18
Uriah 发表于 2025-11-13 07:16 | 显示全部楼层 |阅读模式
DMA做内存到SPI传输时,偶尔会传到一半停掉,DMA状态寄存器显示还在忙,但SPI没继续输出。重启任务能恢复。感觉像是总线仲裁问题或者FIFO卡住。
Clyde011 发表于 2025-11-13 07:19 | 显示全部楼层
试试改成双缓冲模式,我那时候这样解决的。
公羊子丹 发表于 2025-11-13 07:20 | 显示全部楼层
H7的DMA挺复杂的,有时候要加缓存同步。
周半梅 发表于 2025-11-13 07:21 | 显示全部楼层
你用了AXI总线吗?缓存没刷新的话会出问题。
帛灿灿 发表于 2025-11-13 07:22 | 显示全部楼层
我以前遇到过,改成DMA2通道就没事了。
童雨竹 发表于 2025-11-13 07:23 | 显示全部楼层
可能是SPI的TX空标志没触发DMA继续。
万图 发表于 2025-11-13 07:24 | 显示全部楼层
检查一下是不是优先级太低被打断。
Wordsworth 发表于 2025-11-13 07:25 | 显示全部楼层
H7系列对cache一致性特别敏感,记得加SCB_CleanDCache。
Bblythe 发表于 2025-11-13 07:26 | 显示全部楼层
我觉得可以开调试口看DMA状态位。
Pulitzer 发表于 2025-11-13 07:27 | 显示全部楼层
有时FIFO模式不太兼容,关掉看看。
 楼主| Uriah 发表于 2025-11-13 07:28 | 显示全部楼层
我猜是任务调度延迟导致SPI空闲。
stormwind123 发表于 2025-11-13 15:30 | 显示全部楼层
是不是FIFO欠载引起的
七毛钱 发表于 2025-11-13 15:30 | 显示全部楼层
启用FIFO阈值中断,手动预填充
内政奇才 发表于 2025-11-13 16:31 | 显示全部楼层
可能总线仲裁阻塞了
豌豆爹 发表于 2025-11-13 17:31 | 显示全部楼层
禁用循环模式,检查缓冲区对齐
麻花油条 发表于 2025-11-13 15:32 | 显示全部楼层
总线仲裁冲突吧
classroom 发表于 2025-11-13 19:33 | 显示全部楼层
SPI外设的FIFO深度有限,若DMA传输速率与SPI时钟不匹配,可能导致FIFO空或溢出。
cr315 发表于 2025-11-13 21:34 | 显示全部楼层
若启用循环模式,但未正确处理半传输/传输完成中断,可能导致DMA重复传输同一数据块。
elephant00 发表于 2025-11-13 15:35 | 显示全部楼层
也可能是缓冲区对齐问题,DMA缓冲区未对齐到32字节,引发总线错误。
flycamelaaa 发表于 2025-11-13 21:36 | 显示全部楼层
有可能是时钟源不稳定如PLL未锁定,导致SPI时钟跳变。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

186

主题

6716

帖子

1

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