你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

MPU 子区话题

[复制链接]
STMCU小助手 发布时间:2023-2-15 21:40
1 、问题起因 有人询问 STM32F7 和 STM32H7 系列库例程中有关 MPU 配置中的下面这句加绿色下划线的代码的意思是什么?有何用?


@BFX7121@RORGC]~@F$O81E.png


从上面截图中的红色框内代码我们不难看出,这里进行 MPU 设置就是将从 0 开始的 4G 空间,即整个STM32 可寻址空间定义为 Strongly Ordered 存储属性。且此时 MPU Region 编号为 0。可代码注释上又说只是将未定义的区域配置为 Strongly Ordered,这未定义区域到底啥意思,该如何理解?难道跟绿色下划线标示的那行代码有关系。


那么,这句代码 MPU_InitStruct.SubRegionDisable = 0x87; 又是什么意思呢?


要理解这行代码的意思,我们就有必要了解 MPU 的子区概念【Subregion】。

2 、问题解析
所谓子区【Subregion】,当我们对任一存储空间不小于 256B 的区域【Region】进行 MPU 配置时,往往可以把该区【region】等分为 8 个子区【Subregion】,并可以把当前 MPU 配置选择性地针对各个子区进行排除性设置。在内核里有个关于 MPU 配置的寄存器 MPU_RASR,其中有个 8 位字段 SRD 就是用来设置各个子区的 MPU 排除性设置或者说例外性配置。如果某位为 0,表示该子区适用当前 MPU 配置;如果某位为 1,表示该位所对应子区不适用当前 MPU 配置,即不受当前 MPU 配置约束。下图是 MPU_RASR 寄存器的描述截图:


X~W0PUKK$(M)YA9`YBBXFGK.png


不妨举例说一下。假设我们选择了某 64MB 区域进行 MPU 设置,属性配置如下:


3U7BNJHA[IHUFH12E]C4POP.png


基于上面配置,该 64MB 空间配置为不共享、可缓存、可执行程序的 MPU 存储属性【细节可以核对下图4,其中 C 表示 Cacheable,B 表示 Bufferable,S 表示 Shareable】


783IFZ5BB1SO_B3W65J_]ZL.png


这里有针对个别子区做了 MPU 属性排除操作,就是下面靠这句代码实现的:MPU_InitStruct.SubRegionDisable = 0x28;//即二进制 00101000


前面说过了,我们可以将大于 256B 的存储区等分为 8 个子区并做 MPU 属性排除配置。这里的 0x28 对应的8 位 2 进制数表示各个子区针对当前 MPU 配置是否被排除在外的情况,若某位为 0 时表示相应子区适用当前 MPU 配置属性,为 1 则不适用当前 MPU 的配置。


结合前面寄存器描述和上面配置代码,被排除在外的即不适用当前 MPU 配置的子区就是下图 5 中的两个地址空间【标红色 1 的地方】:


LEBG5JPY86IY4EY}96K$_UU.png


若把上面图形左转 90°即可看明白刚才那个 SRD 字段的配置值 0x28 的由来以及地址空间对应关系,SRD 的高位对应高地址子区。基于上面配置,有 2 个 8KB 空间是不适用当前的 MPU 配置,即被排除在外了。


完整版请查看:附件 MPU子区话题_v1.0.pdf (866.6 KB, 下载次数: 0)
收藏 评论0 发布时间:2023-2-15 21:40

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版