STM32修改SYSCFG_UR2寄存器BOOT_ADD0字段操作失败咨询
STM32 BOOT_ADD0寄存器修改不生效的解决步骤
BOOT_ADD0属于STM32的选项字节(Option Bytes)范畴,不属于普通外设寄存器,直接通过寄存器选项卡或内存地址写入不符合选项字节的编程规则,因此不会生效。可按照以下方案操作:
方法1:通过Option Bytes选项卡修改(推荐操作)
- 连接目标芯片后,切换到STM32CubeProgrammer左侧菜单栏的 Option Bytes 选项卡
- 找到
User Configuration分类下的BOOT_ADD0字段,直接输入目标启动地址 - 点击界面右上角的 Apply 按钮,等待软件自动完成选项字节擦除、写入、校验全流程
- 操作完成后对芯片做一次冷复位,新的启动地址配置才会生效
方法2:寄存器/内存地址手动写入流程
如果必须通过寄存器或内存地址直接操作,需要严格遵循选项字节的解锁、写入、上锁流程,步骤如下:
- 先解锁FLASH选项字节操作权限:依次向
FLASH_KEYR寄存器写入密钥0x45670123、0xCDEF89AB解锁FLASH主寄存器,再向FLASH_OPTKEYR寄存器写入相同两个密钥,解锁选项字节操作权限 - 向BOOT_ADD0对应的选项字节内存地址写入目标值
- 置位
FLASH_CR寄存器的OPTSTRT位,触发选项字节编程操作 - 等待
FLASH_SR寄存器的EOP位置1,表示编程完成 - 可选择置位
FLASH_CR寄存器的OPTLOCK位重新锁定选项字节,防止误修改 - 芯片冷复位后配置生效
常见问题排查
- 确认目标芯片的BOOT地址对齐规则,比如F4/F7/H7系列要求128KB对齐,G0/G4系列要求16KB对齐,写入未对齐的值会被硬件自动忽略
- 确认芯片的BOOT0引脚电平,只有BOOT0为低电平时,芯片才会加载BOOT_ADD0的配置值,BOOT0为高电平时加载的是BOOT_ADD1的配置
- 部分STM32系列默认开启nSWBOOT0硬件引脚控制,此时BOOT_ADD0寄存器会被硬件忽略,需要先在选项字节中关闭nSWBOOT0配置,切换到软件启动地址选择模式,修改才会生效
- 不要在芯片处于读保护等级1/2的状态下修改选项字节,会导致操作失败甚至芯片锁死
内容的提问来源于stack exchange,提问作者andrey
相关产品推荐
相关产品推荐

