
STM32H7-MPU 一、MPU的作用4 j7 D) m q1 h9 S* u2 m 防止不受信用的应用程序访问受保护的内存区域1 ]5 z! x& r* c. w 防止用户应用程序破坏操作系统使用的数据 通过阻止任务访问其他任务的数据区5 Q1 p1 S) K4 T+ p4 C& p2 I; y 允许将内存区域定义为只读,以便保护重要数据。 检测意外的内存访问7 c: {# }8 X @2 ] 简单来说,就是内存保护、外设保护和代码访问保护。! ^( h7 w/ U- \4 Q( u1 H: ~$ | 2 Q |6 d# i4 f6 H. L 二、MPU的功能实现1 N( \( @7 ^6 s4 V T MPU可以配置保护16个内存区域,每个区域都是独立配置的。每个区域的最小要求是32字节,同时每个区域还可以配置为8个子区域,通过寄存器对应的bit来使能。 4 y: M+ N6 i1 l. R. q& \: ?: s MPU可配置的16个内存区的序号范围是0-15,还有一个默认区(背景区)序号为-1,这些内存区可以重叠以及嵌套——序号为15的优先级最高、背景区的优先级最低。例如下图,共有七个内存区:一个背景区+序号为0-5的内存区。内存区4和内存区0、1有重叠部分,则重叠部分按照内存区4的配置规则执行;内存区5被完全包含在内存区3里面,则这部分内存区的配置按照内存区5的配置规则进行。 5 @" [ s! L: O" s- F8 v4 g% C ![]() ' ?+ y' `- ?1 E' W% f 三、MPU常用的寄存器(RASR寄存器和控制寄存器)% A6 J0 s+ p4 M ![]() XN位:表示是否使能指令的提取 XN=0:使能指令提取,即这块内存可以执行程序代码! |: g1 ^5 {6 Z* ^) ] XN=1:禁止指令提取,机这块内存禁止执行程序代码 AP位:设置指定区域的访问权限类型( I0 z2 i Z: ^- I# m! ~) |# o3 q ![]() - l/ L( `! P. p& B; z' l TEX、C、B、S位:用于配置Cache的策略 U# n) B7 S, Z3 B: M C位:用于使能或者禁止Cache+ W5 r7 c- o8 M. Y ]3 Q: Q B位:用于配合C位实现Cache下是否使用缓冲 S位:用于解决多总线或者多核访问的共享问题0 P8 s# J: R' `# c# i4 o; k ![]() s& [( r N) s7 f0 s% F! [. V ![]() read/write-through/back/allocate的区别:! A* ^" `8 M# y) I. E& X 一、CPU读Cache, e. r3 {4 f( ~0 } Read through:直接从内存区读取数据 Read allocate:先把数据读取到Cache中,再从Cache中读取数据1 @0 V; A5 o# y# | 二、CPU写Cache a# `. v' ]; R. \3 O% B3 ` 若hit命中,有两种处理方式:* g3 `7 ]& Y+ Z7 U. h4 G7 d 4 b! y8 s2 L$ c* d6 _( f) x/ X& i Write-through:在数据更新时,把数据同时写入Cache和存储区7 E4 C s% N8 s# d) @ 操作简单,但是写入速度慢 Write-back:只有在数据被替换出缓存时,被修改的缓存数据才会被写到后端存储。0 e7 o& D1 p% ? 写入速度快,但是一旦更新后的数据未被写入时出现断电,则数据无法找回 若miss,有两种处理方式: " D$ ^) Q9 V. D a( p Write allocate:先把要写的数据载入到Cache中,写Cache,然后再通过flush的方式写入到内存中。 No-write allocate:并不将写入位置读入缓存,直接把要写的数据写入到内存中。 什么叫hit/miss: z8 {7 g- U. f. x2 `7 w' y 一、读操作4 j) G! z1 J% Z5 K2 E$ A% z 如果CPU要读取的SRAM区数据在Cache中已经加载好,这就叫读命 中(Cache hit),如果Cache里面没有怎么办,这就是所谓的读Cache Miss。 二、写操作, |1 f# {2 O7 J; N2 t* e 如果CPU要写的SRAM区数据在Cache中已经开辟了对应的区域(专业词汇叫Cache Line,以32字节为单位),这就叫写命中(Cache hit),如果Cache里面没有开辟对应的区域怎么办,这就是所谓的写Cache Miss。/ X$ {/ O" p7 t3 t9 y1 K0 u3 m4 d# S* t# w ) U2 |+ h9 o# O+ T3 Z8 ` SRD位:用于控制内存区的子区域,一共有8bit,一个bit控制一个子区域,一般都开启 SIZE位:配置保护的内存的大小. N/ `; r2 {! F) _& @ O 四、MPU的HAL库配置函数" i a5 K* f( p& u: u0 h0 l6 w HAL_MPU_Disable:配置前要禁止MPU+ t. c0 q, |1 d4 c! E& M, b4 _1 m7 b+ V HAL_MPU_Enable:使能 一般使用参数MPU_PRIVILEGED_DEFAULT: d5 B9 g0 p" Y9 q0 i. {1 V HAL_MPU_ConfigRegion:配置MPU
|
STM32H7的TCM,SRAM等五块内存基础知识
STM32H7的TCM,SRAM等五块内存基础知识
简单了解一下STM32H7的BDMA
有奖预约 | STM32H7R7基于RT-Thread RTOS的智能终端GUI解决方案
【STM32H745I-DISCO】基于TouchGFX的工业控制器界面设计
STM32H745I-DISCO串口打印
【STM32H745I-DISCO】TouchGFX探索——3、触屏滑屏操作与中文显示
TouchGFX软件下载及使用
【STM32H745I-DISCO】TouchGFX探索——2、照葫芦画瓢
STM32H745I-DISCO硬件信号为空,M4、M7对于硬件信号的优先性判断