一、问题描述 在使用STM32内部FLASH时,发现有一次在读FLASH内容时直接就进入了HardFault,因为读内部FLASH是直接操作的内存,很简单的一句话,怎么也想不通是什么原因导致的。 8 }& \* l o. y4 c 然后调试模式下,用Keil直接看存储器的值,发现不是全A就是?号,这就确定应该是FLASH出了问题,然后擦除出问题的扇区就发现读取不会在进HardFault的。. i5 F3 |" s2 x) }/ a0 l 通过读STM32H7的手册发现,H7系列和其他系列的FLASH不同,增加了ECC校验的功能,同时有状态寄存器会报一些错误,然后调试模式看状态寄存器,果然有错误,应该是在掉电时擦写FLASH,导致ECC校验出错。7 ]) W$ N2 `! M. i 二、处理 1.打开FLASH的中断,记住一定要解锁,否则不生效,这块就困扰了很久,最后发现是没有解锁导致的。$ j! C, V! t/ n$ q: N Z0 a( ^
2.中断里擦除掉出错的扇区 / Q1 ^+ C: ^/ S* R2 o( l, o0 t$ O FLASH_ErrorPro();是我自己写的出错处理,里面就是擦除出错扇区的处理,读取的哪个扇区地址出错了,就记录下对应的地址,然后中断里擦除即可。因为断电导致FLASH编程未完成,保留里面的数据意义也不大,所以擦掉即可。 1 R9 J [. k# W% h" y
: ^% Z7 L5 V1 y x ?9 ~* X7 o |
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重定向实现方法及常见问题