请选择 进入手机版 | 继续访问电脑版

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

关于STM32H7使能MPU后直接进入HardFault的问题

[复制链接]
攻城狮Melo 发布时间:2022-11-4 16:11
背景:( k. [1 p1 @1 L! N
        在使用CUBE+STM32H743进行开发时,打开了cache,在利用DMA往外发一些数据时出现了发送几次的数据都一样的问题,经过分析,认为是cache的存在导致DMA发送的内存区域的数据未及时更新。网上翻了翻,找到两个办法解决:1、在DMA发送之前使用SCB_CleanInvalidateDCache(),将cache中标记为dirty的数据写入对应存储区,并腾出相应的cache空间;2、打开MPU,标记DMA发送的内存区域能进行透写)。
1 G, L% ^/ U2 u9 {
: \5 l' I6 k' L# K. l+ B, h        我在CUBE上的MPU配置如下:
% d+ ^2 U$ W; G" P8 y
0 c+ ~9 b8 R. d- M( o' b7 ] 236d69f2eb954097a07f59f79da86078.png
1 l6 R" b6 p+ I& \. Z1 {9 m
8 h8 O+ \) Q! w) n: T) j 编译后debug,在进入MPU_Config后,直接进入了Hardfault;
4 P  n2 ]( C  q8 V3 {- G. i- @) o, {, y& \
解决办法:
0 T- O) l! F) w; F4 }: l$ R
  P; i" o0 }) ]        我使用MPU仅仅管理了一小部分内存区域,其他内存未使用MPU管理起来,因此需要使能背景区域(Background Region),否则任何访问违例以及对region外地址区域的访问都将引起fault,做如下更改即可
+ f- u% w- ~7 P5 s& j% S; b% `- |
9c1c0e65a31a46f194c556c958044068.png
3 b, V+ D% t' `% o' R2 f6 {! i# t8 L; b  m- b
————————————————
, h7 A: K3 g) e! s% G4 r# b版权声明:balibala% T, D6 ^& a- X) ~1 L! j6 @
6 c+ B7 }2 t( P* h. b4 ?
收藏 评论0 发布时间:2022-11-4 16:11

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版