Bblythe 发表于 2025-5-10 08:03

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

用双缓冲搬图像数据到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()等函数确保缓存一致性
页: [1]
查看完整版本: 双缓冲DMA传输怎么感觉比普通模式还容易出错?