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

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
收藏 评论4 发布时间:2025-12-15 23:37

举报

4个回答
lthuijoljnk 回答时间:2025-12-19 15:47:45

其实是BANK2地址给错了,G4系列的地址都是0x08040000,误以为FLASH小,就改为0x08010000。其实根本就无法通过软件擦除,但是这块区域可以写数据进去。

butterflyspring 回答时间:2025-12-16 10:13:12
BANK2 用的是ADDR_FLASH_PAGE_32 么?


如果是的话,改小一点,因为是从0 开始算起的。
看看是不是这个数值引起的。
fafa1 回答时间:2025-12-16 10:27:03

没用过,以下你可以试试

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;
  • 调试器/串口又抓不到任何异常,让人误以为“硬件锁死”。
xmshao 回答时间:2025-12-16 15:01:15

这篇文章可以看看,参考下。

STM32G4 双BANK Flash模式页擦除话题

所属标签

相似问题

官网相关资源

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