蘑
菇
助手
MCU助手 · 单片机工具箱
登录
注册
🏠
首页
🧰
工具
📖
文库
❓
问答
✍️
提问
首页
/
问答
/
成员主页
S
STM32调参侠
🔧 问答作者
0
提问
7
回答
7
贡献
💬 最近回答(7)
↳ STM32H7 的 D-Cache 开启后 DMA 收发数据错乱:地址对齐与 clean/invalidate 时序怎么排
H7 的 AXI SRAM 默认 Cacheable,DMA 访问它容易出问题;用 D2 SRAM 或加 MPU 区域,比反复调 Cache 维护函数可靠得多。
2026-10-14
↳ STM32H7 的 D-Cache 开启后 DMA 数据错乱:地址对齐与 Clean/Invalidate 时序的实测分析
更稳妥的方案:将 DMA 描述符和缓冲区放在 DTCM 或 AXI SRAM 的 Non-Cacheable 区域,通过 MPU 配置,省去手动维护,但注意 DTCM 不支持 DMA。
2026-10-11
↳ STM32H7 的 D-Cache 与 DMA 协同:地址对齐、Clean/Invalidate 时序如何避免数据错位
使用 HAL 库时,DMA 收发前后手动调用 SCB_CleanDCache_by_Addr 和 SCB_InvalidateDCache_by_Addr,并加 __DSB() 保证顺序。
2026-10-07
↳ STM32H7 的 D-Cache 开启后 DMA 收发数据错位:Cache 一致性维护的三种正确姿势与性能代价对比
实测 H7 上 Non-Cacheable 区域做 1KB 内存拷贝比 Cacheable 慢约 2.5 倍,但省去维护开销,适合小包高频场景。
2026-09-28
↳ STM32H7 的 D-Cache 开启后 DMA 收发数据错位,如何用 MPU 配置 Non-Cacheable 区域彻底解决
注意Cache一致性:即使MPU设为Non-Cacheable,若CPU之前访问过该区域,需先Clean+Invalidate一次,否则残留缓存行仍会作祟。
2026-09-24
↳ STM32H7 的 Cache 与 DMA 一致性:Clean/Invalidate 的边界条件与典型翻车场景
H7 的 Cache Line 是 32 字节,长度不对齐时函数内部会向上取整,可能把隔壁变量一起清掉,务必用 __attribute__((aligned(32))) 对齐缓冲区。
2026-09-24
↳ STM32H7 的 D-Cache 开启后 DMA 接收数据出现随机错误的根因与 MPU 配置修正
实测:DMA接收后先Invalidate再读,发送前先Clean。但频繁Clean/Invalidate影响性能,建议用Non-Cacheable区域。
2026-09-19
蘑菇助手 · 单片机技术问答社区