STM32H5读取温度传感器校准值引发HardFault原因及解决方案

需积分: 5 0 下载量 177 浏览量 更新于2024-08-03 收藏 449KB PDF 举报
"这篇应用笔记主要讨论了在使用STM32H5微控制器读取温度传感器校准值时遇到的HardFault问题,特别是在开启ICACHE之后。问题的根源在于温度传感器校准值所在的Read-only区域在默认情况下是cacheable的,而STM32H5的AHB系统总线访问这些区域时需要禁用本地缓存,这通常需要通过MPU(Memory Protection Unit)来实现。文中提到的解决方案是正确配置MPU,将OTP、RO以及dataarea等不可缓存区域设置为non-cacheable属性,以避免触发HardFault。" 文章详细介绍了问题的背景和分析过程。首先,用户在使用STM32H5读取温度传感器校准值TS_CAL1和TS_CAL2时,遇到了HardFault异常,该异常只在开启了ICACHE的情况下出现。通过对数据手册的研究,作者发现这两个校准值位于Read-only区域,这些区域通过AHB系统总线访问,并且默认启用缓存。然而,对于像OTP、RO这样的不可缓存区域,必须使用MPU来禁止缓存。 接着,文章进一步阐述了OTP、RO和dataarea的定义。OTP(One-Time Programmable)区域是只读且不可修改的,包含固件信息;RO(Read-only)区域同样为只读,而dataarea是可擦写100k次的区域,用于存储用户数据。这三个区域都需要通过MPU设置为non-cacheable以防止异常。 最后,文章给出了问题的解决方法,即确定并配置这些区域的地址。OTP的地址为[0x08FFF000-0x08FFF7FF],RO的地址为[0x08FFF800-0x08FFFFFF],并且这两个区域是连续的。因此,通过MPU设置,可以确保在访问这些区域时不会触发ICACHE相关的HardFault异常,同时保持代码执行效率。 总结来看,这篇应用笔记提供了针对STM32H5微控制器在使用ICACHE时遇到HardFault问题的解决方案,强调了MPU在管理不可缓存内存区域中的关键作用,并给出了具体的地址配置指导,有助于开发者避免类似问题的发生。