#define FLASH_PAGE_SIZE 2048
#define FLASH_PRG_ADDR ((uint32_t)0x08000000)
#define FLASH_DATA_ADDR (FLASH_PRG_ADDR + (1024 * 1024 - FLASH_PAGE_SIZE))
//------------------------------
void flashPageRead(uint8_t *pBuf)
{
uint32_t* src = (void*)FLASH_DATA_ADDR;
uint32_t* dest = (void*)pBuf;
for (uint16_t i = 0; i < FLASH_PAGE_SIZE / 4; i++)
dest[i] = src[i];
}
//------------------------------
void flashPageWrite(uint8_t *pBuf)
{
flash_unlock();
flash_sector_erase(FLASH_DATA_ADDR);
flash_lock();
flash_unlock();
flash_status_type status = FLASH_OPERATE_DONE;
uint32_t* src = (void*)pBuf;
for (uint16_t i = 0; i < FLASH_PAGE_SIZE / 4; i++)
{
status = flash_word_program(FLASH_DATA_ADDR + i * 4, src[i]);
if (status != FLASH_OPERATE_DONE)
break;
}
flash_lock();
}