STM32H7系列使用QSPI内存映射模式导致系统卡死原因

        最近在学习QSPI这个协议,在使用间接模式以及状态轮询模式都可以正常使用,但一到了使用内存映射模式无论怎么写都会导致系统卡死。在一次DeBug中执行执行着发现代码最终会进入到一个“内存故障中断”服务程序导致代码卡死。

我发现我的代码也没问题啊。此时灵光一现,忽然想起STM32H7具有内存保护管理单元这一硬件外设。我的外设代码也是通过CubeMx配置生成的,默认会使能内存保护管理单元,然后我也是大胆的尝试了一下,直接在CubeMx中将其失能后,代码就能正常跑起来了。当然也可以通过CubeMx将QSPI内存映射模式下所需的内存地址对其解除非法访问的保护应该也可以。

由于本人并未对内存保护单元有过研究,不过我猜测是因为内存保护单元导致无法使用指针的形式去访问内存,因为QSPI的内存映射到MCU中的地址是 0x9000 0000 - 0x9FFF FFFF 而这一地址本来就远远超过STM32H7系列所有MCU的内存地址的,属于无效的非法地址(因为ST官方没有在其添置内存单元,虽然32位足够有4GB的内存可访问,但是由于成本的原因,所以并不能使用完,所以当启动了内存保护单元后会将这些没有内存单元的地址将其“锁死”,导致在QSPI的内存映射访问过程中进入内存故障中断,从而导致程序卡死)。

        最后,不得不说,有时候保护也可能会成为一种限制。

文章如有错误请及时指导,感激不尽。

                                                                感谢大家支持。

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值