公司动态

11.2、STM32H7 MPU Cache深入理解笔记

📅 2026/8/22 10:28:39
11.2、STM32H7 MPU Cache深入理解笔记
建议先看MPU笔记下载链接通过网盘分享的文件MPU内存保护单元.pdf链接: https://pan.baidu.com/s/1Upa6NS_wtXn9mDsA7mqwhg 提取码: w8a4基础Cache知识分数据缓存 D-Cache 和指令缓冲 I-Cache缓存大小都是 16KBSTM32H7 为例主频是 400MHz除了 TCM 和 Cache 以 400MHz工作其它 AXI SRAMSRAM1SRAM2 等都是以 200MHz 工作。数据缓存 D-Cache 就是解决 CPU加速访问 SRAM。如果每次 CPU 要读写 SRAM 区的数据都能够在 Cache 里面进行自然是最好的实现了 200MHz到 400MHz 的飞跃实际是做不到的因为数据 Cache 只有 16KB 大小总有用完的时候。对于使能了 Cache 的 SRAM 区要分读写两种情况考虑。1、 读操作如果 CPU 要读取的 SRAM 区数据在 Cache 中已经加载好这就叫读命中Cache hit如果 Cache里面没有怎么办这就是所谓的读 Cache Miss未命中2、写操作如果 CPU 要写的 SRAM 区数据在 Cache 中已经开辟了对应的区域专业词汇叫 Cache Line以 32字节为单位这就叫写命中Cache hit如果 Cache 里面没有开辟对应的区域怎么办这就是所谓的写 Cache Miss。特别注意的误区知识Cache 是 CPU 内核私有的硬件只归 CPU 管DMA 是另外一个总线主机DMA 根本不知道 CPU Cache 的存在。DMA向SRAM写数据时Cache根本就不知道所以就不会对Cache内存数据写更新Cache知识点参数配置问题上面表一共四种情况如下共享配置是个隐形的大坑STM32H7 编程手册对其的描述是多核共享。豆包解释SCB_CleanDCache_by_Addr () 和 SCB_InvalidateDCache_by_Addr () 怎么区分它们的功能和场景前提Cortex‑M7F7/H7DCache 开启Cache 里面可能有副本SRAM 物理内存可能和 Cache 不一致。两个函数操作单位是 Cache 行32 字节传入地址最好对齐 32 字节缓冲区大小是 32 整数倍。SCB_CleanDCache_by_Addr () DMA发送数据SCB_InvalidateDCache_by_Addr ()DMA接收数据刚才的错误示例双向完整示例的 HAL_ADC_Start_DMA (); 为什么之前用 Clean 呢又不是让 DMA 读缓存 adc 存放数组Cache相关函数提醒此部分笔记来源安富莱STM32-V7开发板用户手册非常推荐和豆包