ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
1013029 Топик полностью
evgeniy1294 (18.06.2020 21:21, просмотров: 1137) ответил Constantin24 на отладчик не отключен. Изначально флеш не залочена. После прошивки запускается программа, которая проверяет флеш на предмет защиты -> лочит -> тишина... Выключаем, включаем устройство и все работает(отладчик все еще подключен к плате) и флеш залочена.
На всякий случай: 
#define OB_RDP_LEVEL_0   ((uint8_t)0xAA)
#define OB_RDP_LEVEL_1 ((uint8_t)0x55)
#define OB_RDP_LEVEL_2 ((uint8_t)0xCC) /*!< Warning: When enabling read protection level 2

it s no more possible to go back to level 1 or 0 */
void flash::UnlockOB()
{
FLASH->OPTKEYR = 0x08192A3BU;
FLASH->OPTKEYR = 0x4C5D6E7FU;
}

void flash::LockOB()
{
FLASH->OPTCR |= FLASH_OPTCR_OPTLOCK;
while(FLASH->SR & FLASH_SR_BSY);
}

bool flash::isReadProtected()
{
uint32_t RDP = (FLASH->OPTCR >> FLASH_OPTCR_RDP_Pos) & 0xFF;
return RDP != 0xAA;
}


void flash::SetReadProtectionState(bool enabled)
{
UnlockOB();
if (enabled)
{
if (!isReadProtected())
{
//FLASH->OPTCR = OPTCR | (0x00A5 << FLASH_OPTCR_RDP_Pos);
*(__IO uint8_t*) 0x40023C15U = OB_RDP_LEVEL_1;
//FLASH->OPTCR |= FLASH_OPTCR_OPTSTRT;
*(__IO uint8_t *) 0x40023C14U |= FLASH_OPTCR_OPTSTRT;
while(FLASH->SR & FLASH_SR_BSY);
}
}
else
{
if (isReadProtected())
{
//FLASH->OPTCR = OPTCR | (0xAA << FLASH_OPTCR_RDP_Pos);
*(__IO uint8_t*) 0x40023C15U = OB_RDP_LEVEL_0;
//FLASH->OPTCR |= FLASH_OPTCR_OPTSTRT;
*(__IO uint8_t *) 0x40023C14U |= FLASH_OPTCR_OPTSTRT;
while(FLASH->SR & FLASH_SR_BSY);
}
}
LockOB();
return;
}