一、问题描述 在使用STM32内部FLASH时,发现有一次在读FLASH内容时直接就进入了HardFault,因为读内部FLASH是直接操作的内存,很简单的一句话,怎么也想不通是什么原因导致的。 然后调试模式下,用Keil直接看存储器的值,发现不是全A就是?号,这就确定应该是FLASH出了问题,然后擦除出问题的扇区就发现读取不会在进HardFault的。# H& K$ [ g' B! x: S * i$ N6 A% {! n G$ M# Y. Y 通过读STM32H7的手册发现,H7系列和其他系列的FLASH不同,增加了ECC校验的功能,同时有状态寄存器会报一些错误,然后调试模式看状态寄存器,果然有错误,应该是在掉电时擦写FLASH,导致ECC校验出错。7 a% v8 t0 c/ K+ ]1 B' j$ w 7 F" v" S; |" I! Z4 _$ R 二、处理# `0 z0 b* F7 T; H( c 9 W+ Y& Q( D* _& p0 N 1.打开FLASH的中断,记住一定要解锁,否则不生效,这块就困扰了很久,最后发现是没有解锁导致的。 * U" s6 u/ n1 @* |: j& x3 s
2.中断里擦除掉出错的扇区 FLASH_ErrorPro();是我自己写的出错处理,里面就是擦除出错扇区的处理,读取的哪个扇区地址出错了,就记录下对应的地址,然后中断里擦除即可。因为断电导致FLASH编程未完成,保留里面的数据意义也不大,所以擦掉即可。7 E+ A' [$ s" A ) m" Z! `6 `% i+ R( \- q
8 C) K, Z7 c, ?. \2 v, Y |
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法
【Wio Lite AI视觉开发套件】+cube.ai与食物识别
【STM32H7S78-DK】汽车仪表系统
【STM32H7S78-DK】基于 rtthread 适配 lcd 驱动移植 lvgl
【STM32H7S78-DK评测】TouchGFX (QR Code)二维码生成器
【STM32H7S78-DK】rtthread 增加 psram 内存管理
【STM32H7S78-DK】开箱与rtthread工程初体验
【STM32H7S78-DK评测】-5 LVGL&DMA2D DEMO测试
【STM32H7S78-DK评测】-4 LTDC&DMA2D 基本测试
【STM32H7S78-DK评测】CoreMark移植和优化--兼记printf重定向实现方法及常见问题