https://community.st.com/t5/stm32-mcus-security/stm32h503-rdp/td-p/799122
STM32H503 RDP
Hello, I am asking for help from the community. My application is completely written, but I can't set read protection. I tried to do all the steps in this guide, but it led to bricking one of my boards. The second board is still in product state = 17? but
community.st.com
void Set_ProductState_Closed(uint8_t Lock)
{
FLASH_OBProgramInitTypeDef OptionsBytesStruct;//create the OB structure
__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST);
__HAL_RCC_CLEAR_RESET_FLAGS();
if(Lock == 1){
HAL_FLASHEx_OBGetConfig(&OptionsBytesStruct);
HAL_FLASH_Unlock();
HAL_FLASH_OB_Unlock();
OptionsBytesStruct.ProductState = OB_PROD_STATE_IROT_PROVISIONED; // SET THE PRODUCTION STATE
HAL_FLASHEx_OBProgram(&OptionsBytesStruct);
HAL_FLASH_OB_Launch();HAL_FLASH_OB_Lock();HAL_FLASH_Lock();
HAL_FLASH_Unlock();
HAL_FLASH_OB_Unlock();
OptionsBytesStruct.ProductState = OB_PROD_STATE_CLOSED; // SET THE CLOSED STATE
HAL_FLASHEx_OBProgram(&OptionsBytesStruct);
HAL_FLASH_OB_Launch();HAL_FLASH_OB_Lock();HAL_FLASH_Lock();
NVIC_SystemReset(); // reboot for changes to take effect
}
else{
HAL_FLASHEx_OBGetConfig(&OptionsBytesStruct);
HAL_FLASH_Unlock();
HAL_FLASH_OB_Unlock();
OptionsBytesStruct.ProductState = OB_PROD_STATE_REGRESSION;// full regression
HAL_FLASHEx_OBProgram(&OptionsBytesStruct);
HAL_FLASH_OB_Launch();HAL_FLASH_OB_Lock();HAL_FLASH_Lock();
NVIC_SystemReset();
}
}
void main(void){
....
uint32_t GetOBState = (FLASH->OPTSR_CUR & FLASH_OPTSR_PRODUCT_STATE);
DEBUGPRINT("OB Stat : %X\r\n", GetOBState);
if(0xED00 == GetOBState){
DEBUGPRINT("RDP\r\n");
Set_ProductState_Closed(1);
}
}
'초보의 아웅다웅 설계하기 > STM32' 카테고리의 다른 글
[STM32]OFFLINE DOWNLOADER PROGRAM (0) | 2025.05.12 |
---|---|
[STM32H5]GENERAL TIMER VS ADVANCED TIMER (0) | 2025.02.19 |
APP 에서 BOOT로 (0) | 2025.02.13 |
[STM32L031]FLASH 라이팅 문제 (0) | 2024.12.20 |
CRC 8-MAXIM, 16-ARC (0) | 2024.11.21 |