打印
[STM32H7]

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

[复制链接]
303|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 | 只看该作者
数据交换时机很讲究,要加判断标志。

使用特权

评论回复
5
帛灿灿| | 2025-5-10 08:07 | 只看该作者
DMA中断函数要自己手动写好。

使用特权

评论回复
6
童雨竹| | 2025-5-10 08:08 | 只看该作者
是不是缓冲区没对齐?

使用特权

评论回复
7
万图| | 2025-5-10 08:09 | 只看该作者
试下设置成Cacheable属性。

使用特权

评论回复
8
Wordsworth| | 2025-5-10 08:10 | 只看该作者
用DTCM内存试试?访问快些。

使用特权

评论回复
9
Bblythe|  楼主 | 2025-5-10 08:10 | 只看该作者
H7系列DMA设置确实比F1复杂。

使用特权

评论回复
10
Pulitzer| | 2025-5-10 08:11 | 只看该作者
数据大小有没有超过FIFO容量?

使用特权

评论回复
11
Uriah| | 2025-5-10 08:12 | 只看该作者
我参考官方DMA2D例程写的。

使用特权

评论回复
12
风凉| | 2025-6-14 12:00 | 只看该作者
STM32H7内部包含多个内存区域,如DTCM、AXI SRAM等,不同区域的DMA主设备支持情况不同。若将双缓冲区的地址分配在DMA无法访问的区域,会导致传输错误

使用特权

评论回复
13
春日负喧| | 2025-6-14 13:00 | 只看该作者
确保双缓冲区位于DMA能够访问的内存区域,如AXI SRAM。可以通过修改项目配置或使用__attribute__((section(".ARM.__at_address")))来指定缓冲区地址

使用特权

评论回复
14
故意相遇| | 2025-6-14 14:00 | 只看该作者
双缓冲模式下,DMA会在缓冲区填满后自动切换,并触发中断通知CPU处理数据。若中断处理函数编写不当或优先级设置不合理,可能导致数据丢失或处理不及时。编写正确的中断处理函数,确保在中断发生时能够及时处理数据

使用特权

评论回复
15
捧一束彼岸花| | 2025-6-14 15:00 | 只看该作者
若缓冲区大小设置不合理,如过小可能导致溢出,过大则可能浪费内存。根据数据传输的需要设置合适的缓冲区大小。可以通过实验或计算来确定最佳的缓冲区大小

使用特权

评论回复
16
白马过平川| | 2025-6-14 18:00 | 只看该作者
DMA的初始化代码顺序可能影响传输的正确性。若初始化顺序不当,可能导致DMA无法正常工作,按照STM32H7的参考手册或相关文档,正确编写DMA的初始化代码,并确保初始化顺序合理

使用特权

评论回复
17
将爱藏于深海| | 2025-6-14 22:00 | 只看该作者
其实楼主可以检查DMA请求源的设置,确保DMA能够在正确的事件发生时被触发

使用特权

评论回复
18
她已醉| | 2025-6-15 01:00 | 只看该作者
合理设置中断优先级,避免与其他重要中断冲突

使用特权

评论回复
19
失物招領| | 2025-6-15 01:32 | 只看该作者
在双缓冲模式下,特别需要注意在切换缓冲区时处理缓存数据

使用特权

评论回复
20
温室雏菊| | 2025-6-16 11:00 | 只看该作者
在启用D-Cache的情况下,若未正确处理缓存一致性,可能导致DMA读取到的数据与CPU处理的数据不一致。可以使用SCB_CleanDCache_by_Addr()等函数确保缓存一致性

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

104

主题

5095

帖子

0

粉丝