I use HAL_FLASH_Program to program my internal flash, but it takes too much time, I program about 90kbytes, it will take about 90 seconds. Is there any faster way to program stm32l072.
my pagesize is 256 bytes, and 90k is about 351 pages
for(i = 0; i < pages; i++)
{
W25qxx_ReadPage((uint8_t *)u32_databuf, EXT_FLASH_ADDR_APP_START + i,0, w25qxx.PageSize);
ProgramInternalFlash(APP_BASE_ADDR + i * w25qxx.PageSize, u32_databuf,w25qxx.PageSize);
}
void ProgramInternalFlash(uint32_t u32_intFlashstart, uStruct_u32 *pData ,uint32_t data_len)
{
HAL_FLASH_Unlock();
/* Fill EraseInit structure*/
EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
EraseInitStruct.PageAddress = u32_intFlashstart;
EraseInitStruct.NbPages = data_len / FLASH_PAGE_SIZE;
if (HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError) != HAL_OK)
{
Error_Handler();
}
Address = u32_intFlashstart;
uint16_t i = 0;
while (Address < u32_intFlashstart + data_len)
{
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address,pData[i].u32_buf) == HAL_OK)
{
Address = Address + 4;
i += 1;
}
else
{
Error_Handler();
}
}
HAL_FLASH_Lock();
}
