[STM32H7] 双缓冲DMA传输怎么感觉比普通模式还容易出错?

[复制链接]
669|10
 楼主| Bblythe 发表于 2025-5-10 08:03 | 显示全部楼层 |阅读模式
用双缓冲搬图像数据到SPI,一会传一会停,是哪里没配对?
Clyde011 发表于 2025-5-10 08:05 | 显示全部楼层
你关了Cache没?不然很可能数据错。
公羊子丹 发表于 2025-5-10 08:06 | 显示全部楼层
我也搞不定双缓冲,干脆改用单缓冲。
周半梅 发表于 2025-5-10 08:07 | 显示全部楼层
数据交换时机很讲究,要加判断标志。
帛灿灿 发表于 2025-5-10 08:07 | 显示全部楼层
DMA中断函数要自己手动写好。
童雨竹 发表于 2025-5-10 08:08 | 显示全部楼层
是不是缓冲区没对齐?
万图 发表于 2025-5-10 08:09 | 显示全部楼层
试下设置成Cacheable属性。
Wordsworth 发表于 2025-5-10 08:10 | 显示全部楼层
用DTCM内存试试?访问快些。
 楼主| Bblythe 发表于 2025-5-10 08:10 | 显示全部楼层
H7系列DMA设置确实比F1复杂。
Pulitzer 发表于 2025-5-10 08:11 | 显示全部楼层
数据大小有没有超过FIFO容量?
Uriah 发表于 2025-5-10 08:12 | 显示全部楼层
我参考官方DMA2D例程写的。
风凉 发表于 2025-6-14 12:00 | 显示全部楼层
STM32H7内部包含多个内存区域,如DTCM、AXI SRAM等,不同区域的DMA主设备支持情况不同。若将双缓冲区的地址分配在DMA无法访问的区域,会导致传输错误
春日负喧 发表于 2025-6-14 13:00 | 显示全部楼层
确保双缓冲区位于DMA能够访问的内存区域,如AXI SRAM。可以通过修改项目配置或使用__attribute__((section(".ARM.__at_address")))来指定缓冲区地址
故意相遇 发表于 2025-6-14 14:00 | 显示全部楼层
双缓冲模式下,DMA会在缓冲区填满后自动切换,并触发中断通知CPU处理数据。若中断处理函数编写不当或优先级设置不合理,可能导致数据丢失或处理不及时。编写正确的中断处理函数,确保在中断发生时能够及时处理数据
捧一束彼岸花 发表于 2025-6-14 15:00 | 显示全部楼层
若缓冲区大小设置不合理,如过小可能导致溢出,过大则可能浪费内存。根据数据传输的需要设置合适的缓冲区大小。可以通过实验或计算来确定最佳的缓冲区大小
白马过平川 发表于 2025-6-14 18:00 | 显示全部楼层
DMA的初始化代码顺序可能影响传输的正确性。若初始化顺序不当,可能导致DMA无法正常工作,按照STM32H7的参考手册或相关文档,正确编写DMA的初始化代码,并确保初始化顺序合理
将爱藏于深海 发表于 2025-6-14 22:00 | 显示全部楼层
其实楼主可以检查DMA请求源的设置,确保DMA能够在正确的事件发生时被触发
她已醉 发表于 2025-6-15 01:00 | 显示全部楼层
合理设置中断优先级,避免与其他重要中断冲突
失物招領 发表于 2025-6-15 01:32 | 显示全部楼层
在双缓冲模式下,特别需要注意在切换缓冲区时处理缓存数据
温室雏菊 发表于 2025-6-16 11:00 | 显示全部楼层
在启用D-Cache的情况下,若未正确处理缓存一致性,可能导致DMA读取到的数据与CPU处理的数据不一致。可以使用SCB_CleanDCache_by_Addr()等函数确保缓存一致性
您需要登录后才可以回帖 登录 | 注册

本版积分规则

161

主题

6070

帖子

1

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