扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

STM32G4 程序 + Option Bytes 一起烧录就死机?LAT1150 官方根治方案

03/17 14:41
381
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

用 STM32G4(比如 G474)双 Bank 芯片的工程师,几乎都会踩这个坑:

想一次性烧录 APP + 把 DBANK 从 1 改成 0(单 Bank),结果程序直接不跑。

图形工具(ST-LINK Utility / CubeProgrammer)怎么设置都不对,必须烧两遍才行。

ST 官方 LAT1150 笔记把时序、原理、一步到位命令行全部讲清楚,看完再也不踩双 Bank 烧录坑。

资料获取:【应用笔记】LAT1150 STM32G4 应用程序与 Option Bytes 同时烧录问题

1. 典型故障现象(完全一致就是同款问题)

  • 芯片:STM32G474(双 Bank Flash)
  • 默认 DBANK=1(双 Bank 模式)
  • 需求:烧程序 + DBANK=0(单 Bank)一步完成
  • GUI 工具同时烧程序 + 改 OB → 程序不运行、读 Flash 乱码
  • 必须先改 DBANK → 复位 → 再烧程序才正常

2. 根因:烧录顺序反了!

GUI 工具的执行顺序是:

  1. 先烧程序(此时还是 DBANK=1 双 Bank 模式)
  2. 再改 DBANK=0(变成单 Bank)

问题在于:
双 Bank 模式烧的程序,在单 Bank 模式下取指方式完全不同,程序直接 “错位” 变无效。

  • DBANK=1(双 Bank):64bit 读取
  • DBANK=0(单 Bank):128bit 读取

模式不匹配 → Flash 内容读出来不一样 → 程序跑飞。

3. 正确顺序(必须这样才对)

  1. 先改 DBANK=0
  2. 复位让 OB 生效
  3. 再烧程序

但 GUI 工具不能调整顺序,所以做不到一步完成。

 

4. 一步到位解决方案:ST-LINK_CLI 命令行

LAT1150 给出唯一正确方法:

用命令行工具 ST-LINK_CLI.exe,先改 OB → 复位 → 擦除 → 烧录。

直接复制这条命令(G4 单 Bank 专用)

st-link_cli.exe -c SWD -OB DBANK=0 -Rst -ME -P test.hex -V

命令含义(顺序不能乱)

  • -c SWD:连接调试口
  • -OB DBANK=0:先改选项字节,关闭双 Bank
  • -Rst:复位,让 OB 生效
  • -ME:全片擦除
  • -P xxx.hex:烧录程序
  • -V:校验

执行一次,程序 + OB 同时到位,直接运行。

5. 为什么 GUI 工具不行?

因为 CubeProgrammer / ST-LINK Utility 都是固定顺序:

先烧程序 → 后改 OB

无法改成 “先改 OB → 再烧程序”。

所以在 G4 双 Bank 切单 Bank 这个场景下,GUI 工具天生不支持。

STM32G4 切换 DBANK 必须先改 OB、再烧程序,GUI 做不到,只能用命令行一步完成。

7. LAT1150 最终结论

  1. STM32G4 双 Bank 切单 Bank 时,烧录顺序决定程序是否能运行
  2. 先烧程序后改 OB → 程序异常
  3. 先改 OB 再烧程序 → 正常运行
  4. 一键完成只能用 ST-LINK_CLI 命令行
  5. 命令顺序:修改 OB → 复位 → 擦除 → 烧录

相关推荐