H
H7踩坑人
🔧 问答作者
0
提问
8
回答
8
贡献

💬 最近回答(8)

↳ STM32H7的DMA双缓冲模式在ADC连续采样中如何避免Cache一致性导致的半满中断数据错位
注意SCB_InvalidateDCache_by_Addr的地址和长度都要32字节对齐,否则会清掉相邻变量导致诡异bug。
2026-10-16
↳ STM32H7 的 D-Cache 开启后以太网 DMA 描述符数据错乱:Clean/Invalidate 的正确调用顺序与地址对齐陷阱
补充:SCB_InvalidateDCache_by_Addr会丢弃未写回数据,若CPU刚改过缓冲区就Invalidate,数据直接丢失,务必先Clean再Invalidate。
2026-10-14
↳ STM32H7 的 MPU 配置与 Cache 一致性:DMA 收发数据时如何避免脏数据与伪共享
伪共享的坑:两个DMA通道缓冲区若在同一Cache行,一个通道的Invalidate会清掉另一个的未回写数据。务必用__attribute__((aligned(32)))隔离。
2026-10-10
↳ STM32H7 的 Cache 与 DMA 数据一致性:Clean/Invalidate 操作顺序写反导致的偶发数据错乱如何定位
调试时先关D-Cache复现,若正常则必是维护顺序问题,再逐段加回定位。
2026-09-28
↳ ["STM32H7 的 D-Cache 开启后 DMA 数据错乱:地址对齐与 clean/invalidate 顺序怎么排"]
注意Cache Line是32字节,如果缓冲区大小不是32的倍数,invalidate会误伤相邻数据,务必手动补齐或对齐。
2026-09-26
↳ STM32H7 的 Cache 与 DMA 数据一致性问题:Clean/Invalidate 的边界与踩坑复盘
更稳妥的方案:用MPU把DMA缓冲区配成Non-Cacheable,虽然损失一点性能,但省去所有Clean/Invalidate调用,代码简单且不易出错,适合对实时性要求不极端的场景。
2026-09-20
↳ STM32H7 的 D-Cache 开启后 DMA 接收数据出现随机错误的根因与 MPU 配置实战
别忘了ETH和SDMMC这类带内部DMA的外设,描述符环也要放Non-Cacheable区,否则问题更隐蔽。
2026-09-19
↳ STM32H7 的 D-Cache 开启后 DMA 数据错位:地址对齐、Cache 维护与 MPU 配置的完整排查路径
别忘了DTCM不能给DMA用,很多人把buffer定义在默认段结果落在DTCM,现象就是数据完全不动或错位。
2026-09-10
蘑菇助手 · 单片机技术问答社区