Делаю вот так в STM8L152 IAR, но я пользуюсь либами. Но заодно вижу пару ошибок копи паста. Не стал исправлять.
Разлачивать FLASH_MemType_Program никчему и почему-то в конце FLASH_Unlock
Код
void SavePairedWithAddress(uint8_t* PairedWithAddress)
{
uint8_t GBuffer[FLASH_BLOCK_SIZE];
memset(GBuffer, 0xff, FLASH_BLOCK_SIZE);
memcpy(GBuffer, PairedWithAddress, 12);
/* Define flash programming Time*/
FLASH_SetProgrammingTime(FLASH_ProgramTime_Standard);
FLASH_Unlock(FLASH_MemType_Program);
/* Wait until Flash Program area unlocked flag is set*/
while (FLASH_GetFlagStatus(FLASH_FLAG_PUL) == RESET);
/* Unlock flash data eeprom memory */
FLASH_Unlock(FLASH_MemType_Data);
/* Wait until Data EEPROM area unlocked flag is set*/
while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET);
/* This function is executed from RAM */
FLASH_ProgramBlock(PAIRED_ADDRESS_BLOCK_OPERATION, FLASH_MemType_Data, FLASH_ProgramMode_Standard, GBuffer);
/* Wait until End of high voltage flag is set*/
while (FLASH_GetFlagStatus(FLASH_FLAG_HVOFF) == RESET);
FLASH_Lock(FLASH_MemType_Program);
FLASH_Unlock(FLASH_MemType_Data);
}