/* Programs a byte at a specified Option Byte Data address.  */
FLASH_Status FLASH_ProgramOptionByteData(u32 address, u8 data)
/* Programs a byte at a specified Option Byte Data address.  */
FLASH_Status FLASH_ProgramOptionByteData(u32 address, u8 data)
{
    FLASH_Status ret;
    __IO u16 temp;
    FLASH_OPTB_Enable();
    FLASH->CR |= FLASH_CR_OPTPG;
    temp = (u16)(~data);
    temp = (temp << 8) & 0xFF00;
    temp = temp | (u16)data;
    address = address & (~0x1);
    *(vu16*)address = temp;
    ret = FLASH_WaitForLastOperation(ProgramTimeout);
    return ret;
}