Цитата(ChipKiller @ Dec 28 2011, 19:01)

FLASH_DUKR - отвечает за разрешение EEPROM, а Вам нужна FLASH (FLASH_PUKR).
Код
FLASH_PUKR = ((unsigned char)0x56);
FLASH_PUKR = ((unsigned char)0xAE);
......
Уверены? На картинке из даташита нарисовано, что область с байтами опций (0х4800...) принадлежит EEPROM. Да и написано в даташите, что установка этих байт не отличается от записи в EEPROM, только нужно записать биты
Код
FLASH_CR2 |= (1<<7);
FLASH_NCR2 &= ~(1<<7);
В библиотечном примере есть такая штука
Код
#define FLASH_CR2_OPT ((u8)0x80) /*!< Select option byte mask */
#define FLASH_NCR2_NOPT ((u8)0x80) /*!< Select option byte mask */
void FLASH_ProgramOptionByte(u16 Address, u8 Data)
{
/* Check parameter */
assert_param(IS_OPTION_BYTE_ADDRESS_OK(Address));
/* Enable write access to option bytes */
FLASH->CR2 |= FLASH_CR2_OPT;
FLASH->NCR2 &= (u8)(~FLASH_NCR2_NOPT);
/* Program option byte and his complement */
*((NEAR u8*)Address) = Data;
*((NEAR u8*)(Address + 1)) = (u8)(~Data);
FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
/* Disable write access to option bytes */
FLASH->CR2 &= (u8)(~FLASH_CR2_OPT);
FLASH->NCR2 |= FLASH_NCR2_NOPT;
}
Вот эти вот строчки не пон6имаю:
Код
*((NEAR u8*)Address) = Data;
*((NEAR u8*)(Address + 1)) = (u8)(~Data);
По идее это указатели на адрес в памяти, но что-то не пойму как его попроще...