使用 J-Flash 修改 STM32 的 Option bytes

在STM32开发过程中,有时候需要修改选项字节;选项字节可以通过ST-Link使用STM32CubeProgrammer程序修改,也可以通过代码在线编程(IAP)来修改,具体方法在STM32参考手册中已有所体现。

因一些原因,遇到了上面两种方式都不合适的情况,通过J-Flash曲线救国,将方法特此记录。

  1. 连接J-Link

  2. 按正常流程新建项目,在选择MCU时,部分STM32型号需要选择包含”allow opt. bytes”字样的型号;在扇区位置,仅选择Option bytes区域。

Snipaste_2025-01-05_17-00-55.png

  1. Target -> Connect,同正常步骤。

  2. Target -> Manual Programming -> Read back -> Selected sectors,此时会将MCU中默认的选项字节读出并显示;

Snipaste_2025-01-05_17-04-55.png

  1. 根据找到相应寄存器地址,应用修改后的数据。

例如,我需要修改nSWBOOT0位,找到其位于FLASH中Option bytes区的地址,为0x1FFF7800,将其内容从0xFFEFF8AA修改为0xFBEFF8AA。

Snipaste_2025-01-05_17-08-30.png

Snipaste_2025-01-05_17-08-41.png

注意修改的地址是FLASH中Option bytes区的地址(0x1FFFF800 ~ 0x1FFFF830区间),而非FLASH外设的寄存器地址(0x40022000 - 0x400223FF)。

Snipaste_2025-01-05_17-18-08.png

在J-Flash软件中,在相应的位置输入相应的值,输入后按回车确认。此时修改过的位置,颜色会变为红色。

alt text

注意,Option bytes在高位[63:32]可能有“Complemented option byte”,不需要手动修改这个部分,在写入时会自动完成相反值的写入。

  1. Target -> Manual Programming -> Erase sectors,擦除原内容。

Snipaste_2025-01-05_17-25-14.png

  1. Target -> Manual Programming -> Program,将新内容写入,此时修改后的内容应该会变回正常的黑色,代表修改已经成功应用。

Snipaste_2025-01-05_17-26-13.png

  1. 重新将 MCU 上电,才可以最终应用 Opt. bytes!FLASH中的选项字节写入后,仅在POR复位时会重新加载,普通复位不会重新加载选项字节!