STM32H7-MPU4 m0 C! I0 M% \: N 一、MPU的作用8 Y U) W q/ G 防止不受信用的应用程序访问受保护的内存区域 防止用户应用程序破坏操作系统使用的数据, C: z- K. J$ n+ k) z 通过阻止任务访问其他任务的数据区2 w: |+ D& n/ a @% {( Q 允许将内存区域定义为只读,以便保护重要数据。 检测意外的内存访问 简单来说,就是内存保护、外设保护和代码访问保护。 z* i; R/ A. c5 T, Z: m 二、MPU的功能实现 MPU可以配置保护16个内存区域,每个区域都是独立配置的。每个区域的最小要求是32字节,同时每个区域还可以配置为8个子区域,通过寄存器对应的bit来使能。 MPU可配置的16个内存区的序号范围是0-15,还有一个默认区(背景区)序号为-1,这些内存区可以重叠以及嵌套——序号为15的优先级最高、背景区的优先级最低。例如下图,共有七个内存区:一个背景区+序号为0-5的内存区。内存区4和内存区0、1有重叠部分,则重叠部分按照内存区4的配置规则执行;内存区5被完全包含在内存区3里面,则这部分内存区的配置按照内存区5的配置规则进行。8 d2 Z* G# {1 y7 ` k% I X ; _! K8 `/ V+ g2 x6 ? i9 u& q9 w * h5 [& E; A9 d# t 三、MPU常用的寄存器(RASR寄存器和控制寄存器)& a( t6 t; O8 r2 [4 \0 h, G : P% q1 b. X: V5 O% j 7 {4 D' ]) j: B+ T# j2 H XN位:表示是否使能指令的提取' Z: @: B3 M) G1 f W( i. e XN=0:使能指令提取,即这块内存可以执行程序代码 XN=1:禁止指令提取,机这块内存禁止执行程序代码9 r4 ~; N/ n0 s! G" R, L8 w( L" t AP位:设置指定区域的访问权限类型 5 f8 h" _6 V/ D TEX、C、B、S位:用于配置Cache的策略 C位:用于使能或者禁止Cache B位:用于配合C位实现Cache下是否使用缓冲 S位:用于解决多总线或者多核访问的共享问题 % ~( V# O/ t5 A" B$ | + ]9 Y- E3 w# [3 ]- u" h # M; f' {; p- b0 j c read/write-through/back/allocate的区别: 一、CPU读Cache 2 Y/ M G0 C1 U. G+ B) E& m Read through:直接从内存区读取数据8 F& u5 {: h7 d* e. _4 A1 N/ x Read allocate:先把数据读取到Cache中,再从Cache中读取数据 二、CPU写Cache/ |* I5 X9 o0 z1 K3 }7 B5 E5 u 7 { t) e: `0 [ 若hit命中,有两种处理方式:6 `# z& M3 f) j) z! V; ?* ^ ( o+ m( K. j5 z& w! O Write-through:在数据更新时,把数据同时写入Cache和存储区 操作简单,但是写入速度慢 Write-back:只有在数据被替换出缓存时,被修改的缓存数据才会被写到后端存储。* y) |$ Q4 b1 G% r$ f. g 写入速度快,但是一旦更新后的数据未被写入时出现断电,则数据无法找回 若miss,有两种处理方式:8 D3 |5 d1 {( g$ \& A; c 4 J; w+ V' F) k8 u Write allocate:先把要写的数据载入到Cache中,写Cache,然后再通过flush的方式写入到内存中。, z8 i: _. S9 ]+ G No-write allocate:并不将写入位置读入缓存,直接把要写的数据写入到内存中。3 I1 C, i- A H8 z. M" _ 什么叫hit/miss:3 n( x& T. q6 ~ 一、读操作4 D& X. H. X9 w* ]' N 如果CPU要读取的SRAM区数据在Cache中已经加载好,这就叫读命 中(Cache hit),如果Cache里面没有怎么办,这就是所谓的读Cache Miss。 二、写操作 如果CPU要写的SRAM区数据在Cache中已经开辟了对应的区域(专业词汇叫Cache Line,以32字节为单位),这就叫写命中(Cache hit),如果Cache里面没有开辟对应的区域怎么办,这就是所谓的写Cache Miss。 SRD位:用于控制内存区的子区域,一共有8bit,一个bit控制一个子区域,一般都开启 SIZE位:配置保护的内存的大小6 l& w8 M9 s& ]7 t9 X2 l , k D! Z1 v, V/ }# w$ k/ M* j' h 四、MPU的HAL库配置函数6 `* L2 P# f$ \3 R+ d HAL_MPU_Disable:配置前要禁止MPU HAL_MPU_Enable:使能 一般使用参数MPU_PRIVILEGED_DEFAULT HAL_MPU_ConfigRegion:配置MPU
|
【经验分享】STM32_H7_ADC
STM32H7R/S高性能MCU:安全性,大存储和优异图显赋能更多应用创新
Stm32H7XX GCC下分散加载实现
【银杏科技ARM+FPGA双核心应用】STM32H7系列10——ADC
DIY-STM32H750核心板
[nucleo-H7A3ZI-Q]1-点亮一个皮皮灯
DIY-STM32H743核心板
【银杏科技ARM+FPGA双核心应用】STM32H7系列57——MDK_FLM
1月10日有奖直播 | 基于STM32 的CODESYS智能自动化解决方案
STM32的CAN FD位定时设置注意事项