STMCU小助手
发布时间:2021-12-26 15:36
|
STM32H7-MPU 一、MPU的作用 防止不受信用的应用程序访问受保护的内存区域7 L3 B1 v' j/ T! \' T' ] 防止用户应用程序破坏操作系统使用的数据6 H+ Z2 z+ M; C# I2 k7 ~! C( I 通过阻止任务访问其他任务的数据区 允许将内存区域定义为只读,以便保护重要数据。 检测意外的内存访问- K' X; ?8 `2 K4 h 简单来说,就是内存保护、外设保护和代码访问保护。& P* R8 P" x+ ~ / e9 ~, e. |+ z' N. B 二、MPU的功能实现 MPU可以配置保护16个内存区域,每个区域都是独立配置的。每个区域的最小要求是32字节,同时每个区域还可以配置为8个子区域,通过寄存器对应的bit来使能。0 p- s1 s" s1 q6 D# T2 o , Q2 L- d6 n3 M5 e2 X MPU可配置的16个内存区的序号范围是0-15,还有一个默认区(背景区)序号为-1,这些内存区可以重叠以及嵌套——序号为15的优先级最高、背景区的优先级最低。例如下图,共有七个内存区:一个背景区+序号为0-5的内存区。内存区4和内存区0、1有重叠部分,则重叠部分按照内存区4的配置规则执行;内存区5被完全包含在内存区3里面,则这部分内存区的配置按照内存区5的配置规则进行。
; R. M# G# Z& F S o0 A! T 三、MPU常用的寄存器(RASR寄存器和控制寄存器)% m# _+ r6 V8 H- Y5 [$ h 0 s' w' q" s' W0 j& R% @/ h& s h
& E& p1 |- n- |. J$ u- p XN位:表示是否使能指令的提取' N& O+ \6 T) ?- d0 T XN=0:使能指令提取,即这块内存可以执行程序代码 XN=1:禁止指令提取,机这块内存禁止执行程序代码$ X7 E9 ^ t2 ]1 p+ s% }' J2 P) |" O AP位:设置指定区域的访问权限类型) G) ~& k% I6 V4 W
TEX、C、B、S位:用于配置Cache的策略5 \* F1 ~7 @! U$ k0 v C位:用于使能或者禁止Cache7 v3 A3 o% l! K% ~* v! v0 {5 O B位:用于配合C位实现Cache下是否使用缓冲 S位:用于解决多总线或者多核访问的共享问题: v3 ?& L( o" T1 j* X
read/write-through/back/allocate的区别: 一、CPU读Cache% b+ z, z$ z( x+ {$ h# U$ ~/ \) b Read through:直接从内存区读取数据 Read allocate:先把数据读取到Cache中,再从Cache中读取数据 二、CPU写Cache 若hit命中,有两种处理方式:# y4 e. Y. g+ L0 k9 r Write-through:在数据更新时,把数据同时写入Cache和存储区 操作简单,但是写入速度慢 Write-back:只有在数据被替换出缓存时,被修改的缓存数据才会被写到后端存储。 写入速度快,但是一旦更新后的数据未被写入时出现断电,则数据无法找回 若miss,有两种处理方式:1 q' ]# {) f. c Write allocate:先把要写的数据载入到Cache中,写Cache,然后再通过flush的方式写入到内存中。 No-write allocate:并不将写入位置读入缓存,直接把要写的数据写入到内存中。! Q& ?1 y# W2 S6 }; {; R 什么叫hit/miss:6 d( @6 U8 C7 n, K S 一、读操作. s" ]7 E! W8 }" P9 a. | 如果CPU要读取的SRAM区数据在Cache中已经加载好,这就叫读命 中(Cache hit),如果Cache里面没有怎么办,这就是所谓的读Cache Miss。 二、写操作/ }+ [2 |) }5 G; @) f" e" p) H- s" f 如果CPU要写的SRAM区数据在Cache中已经开辟了对应的区域(专业词汇叫Cache Line,以32字节为单位),这就叫写命中(Cache hit),如果Cache里面没有开辟对应的区域怎么办,这就是所谓的写Cache Miss。 SRD位:用于控制内存区的子区域,一共有8bit,一个bit控制一个子区域,一般都开启 SIZE位:配置保护的内存的大小6 @0 [; g7 ^ \2 T : G* F, A$ h2 n1 F + s* k. `& T) d 四、MPU的HAL库配置函数# k4 `: @' T; f0 I) P HAL_MPU_Disable:配置前要禁止MPU) {( r* h, I; u1 F d4 s HAL_MPU_Enable:使能! @5 Z: E+ a! \# d 一般使用参数MPU_PRIVILEGED_DEFAULT F4 x! A0 [( _! E- \5 c HAL_MPU_ConfigRegion:配置MPU
% Y |$ t! m6 }! v) ~ |
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
【福利三:逢7发帖赢大礼】使用MPU6050模块、img_dsc、img_btn机制实现一些简单有趣的动画效果
【福利三:逢7发帖赢大礼】使用arc弧形拉条控件控制PWM舵机及使用SPI3接口操作NRF24L01模块进行无线通信
【福利三:逢7发帖赢大礼】调试nucleo-WBA65RI工程测试样板的一些心得
【福利三:逢7发帖赢大礼】lv_timer和BME680实现温度、湿度、气压数据读取
【福利三:逢7发帖赢大礼】成功利用STM32H743VI片内SRAM12和DTCM空间(完全胜利)
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
【福利三:逢7发帖赢大礼】使用惠勤致远STM32H743VI开发板+ST7796并口彩屏移植LVGL9.5并分享一些额外内容
【 逢7发帖赢大礼】7、TouchGFX中实现云彩流动效果
微信公众号
手机版