diff --git a/lib/stm32/f1/flash.c b/lib/stm32/f1/flash.c index 49f182c6..babfc45b 100644 --- a/lib/stm32/f1/flash.c +++ b/lib/stm32/f1/flash.c @@ -52,6 +52,9 @@ void flash_set_ws(u32 ws) void flash_unlock(void) { + /* Clear the unlock state. */ + FLASH_CR |= FLASH_CR_LOCK; + /* Authorize the FPEC access. */ FLASH_KEYR = FLASH_KEYR_KEY1; FLASH_KEYR = FLASH_KEYR_KEY2; diff --git a/lib/stm32/f2/flash.c b/lib/stm32/f2/flash.c index 0b9f8348..c41ddf2c 100644 --- a/lib/stm32/f2/flash.c +++ b/lib/stm32/f2/flash.c @@ -78,6 +78,9 @@ void flash_set_ws(u32 ws) void flash_unlock(void) { + /* Clear the unlock state. */ + FLASH_CR |= FLASH_CR_LOCK; + /* Authorize the FPEC access. */ FLASH_KEYR = FLASH_KEYR_KEY1; FLASH_KEYR = FLASH_KEYR_KEY2; @@ -130,6 +133,10 @@ void flash_clear_status_flags(void) void flash_unlock_option_bytes(void) { + /* Clear the unlock state. */ + FLASH_OPTCR |= FLASH_OPTCR_OPTLOCK; + + /* Unlock the option bytes. */ FLASH_OPTKEYR = FLASH_OPTKEYR_KEY1; FLASH_OPTKEYR = FLASH_OPTKEYR_KEY2; } diff --git a/lib/stm32/f4/flash.c b/lib/stm32/f4/flash.c index 75446ea2..a2045436 100644 --- a/lib/stm32/f4/flash.c +++ b/lib/stm32/f4/flash.c @@ -78,6 +78,9 @@ void flash_set_ws(u32 ws) void flash_unlock(void) { + /* Clear the unlock sequence state. */ + FLASH_CR |= FLASH_CR_LOCK; + /* Authorize the FPEC access. */ FLASH_KEYR = FLASH_KEYR_KEY1; FLASH_KEYR = FLASH_KEYR_KEY2; @@ -130,6 +133,10 @@ void flash_clear_status_flags(void) void flash_unlock_option_bytes(void) { + /* Clear the unlock state. */ + FLASH_OPTCR |= FLASH_OPTCR_OPTLOCK; + + /* Unlock option bytes. */ FLASH_OPTKEYR = FLASH_OPTKEYR_KEY1; FLASH_OPTKEYR = FLASH_OPTKEYR_KEY2; }