[STM32N6] 如何在STM32中实现Flash的块擦除和写入?

[复制链接]
1323|10
 楼主| 我爱台妹mmd 发表于 2025-2-28 23:54 | 显示全部楼层 |阅读模式
STM32如何高效地进行Flash块擦除和写入操作,并避免重复擦写?
公羊子丹 发表于 2025-3-1 07:35 | 显示全部楼层
STM32的Flash写入前需要先擦除,特别是NOR Flash结构的MCU,写入前不擦除可能会导致数据错误,你是要存配置数据还是固件升级?
周半梅 发表于 2025-3-1 07:37 | 显示全部楼层
Flash的擦写次数是有限的,比如10万次左右,频繁擦写容易导致Flash寿命缩短,你是有高频率写入的需求吗?
帛灿灿 发表于 2025-3-1 07:38 | 显示全部楼层
如果只是写少量数据,可以用EEPROM仿真技术,不需要每次都擦除整个块,你的应用场景适合这种方式吗?
童雨竹 发表于 2025-3-1 07:39 | 显示全部楼层
使用Flash写入时要确保CPU频率符合Flash编程要求,比如某些型号需要降低时钟才能正确写入,否则可能会写入失败或者异常。
万图 发表于 2025-3-1 07:41 | 显示全部楼层
不同型号的STM32 Flash擦除粒度不同,比如F4系列是按扇区擦除,而G0系列是按页擦除,你用的N6系列是多大容量的Flash?
Wordsworth 发表于 2025-3-1 07:42 | 显示全部楼层
如果你是做Bootloader升级,建议使用双分区(A/B)方案,避免升级过程中断导致固件损坏,这种方式你考虑过吗?
Bblythe 发表于 2025-3-1 07:43 | 显示全部楼层
写入Flash时要注意对齐问题,比如某些STM32型号要求4字节或8字节对齐,没对齐可能会引发HardFault,你有遇到类似问题吗?
Pulitzer 发表于 2025-3-1 07:44 | 显示全部楼层
擦除Flash可能会影响MCU运行,尤其是在中断较多的情况下,建议在关键操作前禁用中断或者使用IWDG防止意外死机。
Uriah 发表于 2025-3-1 07:46 | 显示全部楼层
如果想提高写入效率,可以使用DMA方式写入Flash,而不是CPU主动写入,这样可以减少CPU占用率,适合大数据量存储。
Clyde011 发表于 2025-3-1 07:47 | 显示全部楼层
ST官方的HAL库提供了HAL_FLASH_Program()和HAL_FLASHEx_Erase()函数,CubeMX也可以自动生成代码,你是打算用HAL库还是直接操作寄存器?
失物招領 发表于 2025-3-16 01:22 | 显示全部楼层
你可以按照一页一页的方式写,就是数据攒成一页再写

她已醉 发表于 2025-3-16 02:32 | 显示全部楼层
我记得一般flash读写是不是一次4页的操作啊

将爱藏于深海 发表于 2025-3-16 03:42 | 显示全部楼层
避免重复擦写的话,我觉得你就得组包才行

温室雏菊 发表于 2025-3-16 04:33 | 显示全部楼层
这个咋说呢,你先了解一下flash的操作结构,就应该差不多知道了

春日负喧 发表于 2025-3-16 05:32 | 显示全部楼层
高效的话,一般就是对擦除是一次四页擦除,写也是一页一页写就比较好了

捧一束彼岸花 发表于 2025-3-16 06:34 | 显示全部楼层
这种只要是数据是FF好像都可以直接写吧

风凉 发表于 2025-3-16 07:29 | 显示全部楼层
RAM中维护一个缓冲区,将数据先写入缓冲区,待缓冲区满或需要保存时再进行Flash写入操作

西洲 发表于 2025-3-16 08:23 | 显示全部楼层
尽量将多次写入操作合并为一次批量写入,减少擦写次数

白马过平川 发表于 2025-3-16 09:23 | 显示全部楼层
Flash擦除的最小单位是页或扇区,避免擦除整个Flash块。在写入前,确保目标区域已被擦除

您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

648

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部