STM32的选项字节(Option Bytes)是一组存储在芯片内部独立Flash区域中的特殊配置数据,用于控制芯片的关键硬件特性和安全功能。

一、 选项字节的定义与位置
选项字节是STM32片内Flash信息块的一部分,与用于存储用户程序的主存储块(Main Flash)和存放官方Bootloader的系统存储器(System Memory)分开。它是一个可编程的非易失性存储区域,用户可以根据应用需求进行修改。
其地址因芯片系列和型号而异。例如,在STM32F103中,其基地址定义为 0x1FFFF800。选项字节的内容在每次系统复位时,会被加载到对应的寄存器(如 FLASH_OBR 和 FLASH_WRPR)中生效。
二、 选项字节的核心功能
选项字节主要配置以下几类功能:
-
读保护(RDP - Read Protection)
- 功能:保护主Flash中的程序代码不被通过调试接口(如JTAG/SWD)或从RAM启动的程序非法读取,是防止固件被抄袭的关键手段。
- 级别 :
- 级别0:无保护,默认状态(RDP = 0xAA)。
- 级别1:使能读保护。启用后,通过调试器无法读取Flash内容;若从级别1降级到级别0,芯片会自动擦除整个主Flash。
- 级别2 :最高保护级别(RDP = 0xCC)。一旦设置将永久禁用调试接口(JTAG熔断),且无法再降级,程序更新通常需依靠预留的IAP(在应用中编程)接口。
-
写保护(WRP - Write Protection)
- 功能:对主Flash的特定扇区(页)设置写保护,防止内容被意外或恶意擦写。通常用于保护Bootloader或关键数据。
- 操作:可以按扇区(或成对扇区)进行保护设置。保护状态为"0"表示保护,"1"表示不保护。
-
用户配置(USER)
- 功能 :配置一些硬件行为,主要包括:
- 看门狗:选择看门狗(IWDG)是上电后硬件使能还是软件使能。
- 复位配置:配置芯片进入Stop或Standby低功耗模式后是否产生复位。
- 欠压复位(BOR):配置芯片的欠压复位阈值电平(部分系列)。
- 功能 :配置一些硬件行为,主要包括:
-
启动配置(BOOT)
- 功能:与外部BOOT引脚配合,决定芯片的启动源(主Flash、系统存储器、SRAM)。在某些系列(如STM32G系列)中,可以通过选项字节完全配置启动模式,忽略外部引脚状态,从而节省一个IO口。
三、 如何操作选项字节
操作选项字节主要有两种方式:
-
使用编程工具 :这是最常用的方法。可以使用ST官方工具如 STM32CubeProgrammer 、ST-LINK Utility 或第三方工具如 J-Flash,通过调试器(ST-LINK, J-Link)连接芯片后进行图形化配置和编程。
-
在应用程序中编程:用户可以在自己的代码中调用HAL库或标准外设库函数来修改选项字节。这常用于产品量产时自动启用保护,或实现IAP升级中的配置切换。
- 基本流程包括:解锁Flash和选项字节、配置参数、编程、最后执行加载或系统复位使新配置生效。
四、 重要注意事项
- 复位生效 :修改选项字节后,通常需要执行一次系统复位 或重新上电,新的配置才会生效。
- 操作顺序与影响:在STM32F1等系列中,修改选项字节(如设置读保护)可能会导致其他部分(如写保护设置、用户数据)被恢复为默认值。因此,在需要同时配置多项时,应注意操作的先后顺序,并在操作后重新校验所有配置。
- 级别2的永久性 :RDP级别2(0xCC)的设置是不可逆的,会永久关闭调试接口。设置前务必确认产品后续无需再通过调试器更新程序。
- 系列差异:不同STM32系列(如F1, F4, G0, H7)的选项字节地址、位定义和功能可能有所不同,具体操作时应以对应型号的参考手册为准。