[STM32H7] STM32H7 HAL 库 SPI DMA 无法接收数据

[复制链接]
424|71
故里说长安 发表于 2026-3-26 22:57 | 显示全部楼层
尝试先单独测试DMA接收功能验证硬件连接
szt1993 发表于 2026-3-30 14:17 | 显示全部楼层
SPI DMA 设置参数很重要的
小小蚂蚁举千斤 发表于 2026-3-30 23:02 | 显示全部楼层
使用阻塞式 SPI不如DMA
发GV第几啊 发表于 2026-3-31 23:52 | 显示全部楼层
11111111
公羊子丹 发表于 2026-4-2 08:16 | 显示全部楼层
我怀疑你的RxBuffer没加volatile,被编译器优化掉了,改成volatile uint8_t RxBuffer[27],大概率就能读到正常数据。
周半梅 发表于 2026-4-2 08:17 | 显示全部楼层
这问题在H7上特别常见!DMA必须等传输完成再读数据,你现在调用完就跑,数据还没搬完,读到的自然全是0。
帛灿灿 发表于 2026-4-2 08:18 | 显示全部楼层
你检查过DMA发送流了吗?你只配了RX流,SPI收发DMA必须同时开TX和RX,少一个都无法正常工作。
童雨竹 发表于 2026-4-2 08:19 | 显示全部楼层
我建议在HAL_SPI_TransmitReceive_DMA之后加while等待DMA完成,或者用完成回调,别让CPU立刻执行其他代码。
万图 发表于 2026-4-2 08:20 | 显示全部楼层
H7的DMA和Cache会冲突,你要么把RxBuffer放到非Cache区域,要么调用SCB_CleanInvalidateDCache刷新缓存再读。
Wordsworth 发表于 2026-4-2 08:25 | 显示全部楼层
你有没有确认SPI时钟配置正确?H7主频高,SPI分频不对会导致DMA采样异常,先降到低频测试更稳。
Bblythe 发表于 2026-4-2 08:26 | 显示全部楼层
我踩过一模一样的坑!NSS软件管理时要手动拉低片选,DMA传输期间必须保持有效,不然从机不输出数据。
Pulitzer 发表于 2026-4-2 08:28 | 显示全部楼层
你可以先开DMA完成中断,在回调函数里打印数据,确认中断有没有触发,就能定位是DMA没动还是数据没读对。
Uriah 发表于 2026-4-2 08:29 | 显示全部楼层
好奇问下,你开启了SPI的TX DMA中断吗?只开RX中断不行,双向传输必须两个流的中断都正常工作。
Clyde011 发表于 2026-4-2 08:30 | 显示全部楼层
试试把DMA模式从NORMAL改成CIRCULAR,先验证DMA能不能持续搬运,排除单次传输配置错误的问题。
linfelix 发表于 2026-4-3 11:18 | 显示全部楼层
FIFO 是提高效率用的,不开也能正常收发
sdCAD 发表于 2026-4-3 13:55 | 显示全部楼层
你用的是 SPI1 / SPI2?
vivilyly 发表于 2026-4-3 14:14 | 显示全部楼层
SPI 是全双工的,接收数据的前提是产生时钟。
kkzz 发表于 2026-4-3 14:29 | 显示全部楼层
抓取 SCK 和 MISO 波形。
cemaj 发表于 2026-4-3 16:23 | 显示全部楼层
需要 FIFO / 环形缓冲吗?
robincotton 发表于 2026-4-4 19:39 | 显示全部楼层
环形缓冲是高速连续通信才用              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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