单片机:STM32F030
库:HAL库
目标:在程序软件中修改读保护选项字节,这样程序下载进去之后就自动保护了,不用再在ST-LINK中修改选项字节了
注意事项:写选项字节,除了解锁OB,还要解锁FLASH,开始只解锁OB,没解锁FLASH,一直调试不成功
static FLASH_OBProgramInitTypeDef OptionsBytesStruct;
//解锁Flash
HAL_FLASH_Unlock();
//解锁选项字节区
HAL_FLASH_OB_Unlock();
//读取选项字节设置
HAL_FLASHEx_OBGetConfig(&OptionsBytesStruct);
//检测RDP的设置是否低于LEVEL 1
if(OptionsBytesStruct.RDPLevel < OB_RDP_LEVEL_1)
{
//重写选项字
OptionsBytesStruct.OptionType = OPTIONBYTE_RDP;
OptionsBytesStruct.RDPLevel = OB_RDP_LEVEL_1;
//如果写入没成功
if(HAL_FLASHEx_OBProgram(&OptionsBytesStruct) != HAL_OK)
{
//红灯快速闪烁
while(1)
{
LED_RED_ON();
DelayMs(100);
LED_RED_OFF();
DelayMs(100);
}
}
else
{
//红色LED显示短短长
LED_RED_ON();
DelayMs(200);
LED_RED_OFF();
DelayMs(200);
LED_RED_ON();
DelayMs(200);
LED_RED_OFF();
DelayMs(200);
LED_RED_ON();
DelayMs(1000);
//如果写入成功,则复位加载选项字节
HAL_FLASH_OB_Launch();
}
}
//锁定选项字节
HAL_FLASH_OB_Lock();
HAL_FLASH_Lock();