你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G4 FLASH擦除不了,寻求各位大佬、官方的帮助

[复制链接]
lthuijoljnk 提问时间:2025-12-15 23:37 / 未解决

1、STM32G473RBT6 移植官方的双bank升级程序。我已使用最简单的外设CRC、UART、DMA来构建工程进行验证,通过串口DMA传输数据进行FLASH的擦除和编程操作。

image.png

2、目前发现在flash已擦除的情况下可以写入数据,但重新进行擦除操作却不行,尝试调试、串口输出状态发现其HAL库函数执行返回的结果没有错误错误信息,包括寄存器(SR、CR、OPTR等没有看出有什么问题)。程序正常执行如下所示(这里使用的擦除bank2,根据FB_MODE bit判断擦除另一个bank),它设置了MERx和STRT,但是没有任何变化。flash未擦除导致编程返回错误。

0a9d7a28762ec78c8023c5e38244fe30.png

a8638965d7925f75776cb13eab2cd49e.jpg9002e669bc87737f86e0128ea47f10d0.png

3、细节:根据参考手册描述的擦除bank步骤,没有看出有什么问题;读取的选项字节保护区域的起始>结束,排除是因为保护区域导致的,况且编程也能成功,DBANK=1;尝试过擦除bank1(FB_MODE = 0,程序在bank1运行),这导致程序被擦除而无法执行了,为什么偏偏bank2不行呢?使用芯片的flash为128K,bank的page为32;这个官方的例程程序我也曾在做其它G47x系列的OTA功能上成功实现过。

如果需要更多细节,可以继续讨论,拜托了!!!

376b89438454c20dbd7e40f6aabceaee.jpg
收藏 评论2 发布时间:2025-12-15 23:37

举报

2个回答
butterflyspring 回答时间:2 小时前
BANK2 用的是ADDR_FLASH_PAGE_32 么?


如果是的话,改小一点,因为是从0 开始算起的。
看看是不是这个数值引起的。
fafa1 回答时间:1 小时前

没用过,以下你可以试试

STM32G473 的 FLASH 控制器在“双 Bank”模式下要求 先通过 FLASH_CR 的 BKER 位(bit11)选中目标 Bank,再置位 MERx/STRT 。 官方例程里对 BKER 的处理大多照搬 G0 系列(bit13),结果对 G4 来说“选 Bank”动作根本没生效,于是擦除 Bank2 时控制器实际仍然指向 Bank1,表现为:

  • 寄存器值看起来“正常”(MER2=1、STRT=1),但 BSY 一瞬即退,Flash 内容纹丝不动;
  • 再次写入时 PGSERR 置位,HAL 返回 HAL_FLASH_ERROR_OPERATION;
  • 调试器/串口又抓不到任何异常,让人误以为“硬件锁死”。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版