Question
HAL_FLASHEx_Erase Problem
Hello everyone !
I am converting one of the my projects from F0 to G0. While debugging, when i come to HAL_FLASHEx_Erase line, it jumps to HardFault. I checked the memory, flash address is empty. I don't erase the program. Here is the some picture during the debug session and code.
What is the problem or my fail?
//-------Error flags after the Erase function

int flash_par_adr1[ParSize] __attribute__((at(0x0800F000))); // 4096 Byte =4KB
int flash_par_adr2[ParSize] __attribute__((at(0x0800E000))); // 4096 Byte =4KB
//_____________________________________________________________________________ SaveParamToFlash
HAL_StatusTypeDef SaveParamToFlash(int page)
{
uint32_t tFlashAddress = 0x00;
uint32_t tParAddress = 0x00;
FLASH_EraseInitTypeDef FLASH_EraseInit;
uint32_t PageError;
HAL_StatusTypeDef feedback;
if(page == 0)
FlashAddress= (uint32_t)&flash_par_adr1;
else
FlashAddress= (uint32_t)&flash_par_adr2;
/* Erase the FLASH pages */
ParAddress = (uint32_t)∥
EndAddress = ParAddress + ParSize;
NbrOfPage = (EndAddress - ParAddress) / FLASH_PAGE_SIZE + 1;
FLASH_EraseInit.TypeErase = FLASH_TYPEERASE_PAGES;
//FLASH_EraseInit.Banks = 0x00;
FLASH_EraseInit.Page = FlashAddress;
FLASH_EraseInit.NbPages = NbrOfPage;
HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_MISERR | FLASH_FLAG_PGSERR | FLASH_FLAG_FASTERR);
feedback = HAL_FLASHEx_Erase(&FLASH_EraseInit,&PageError);
HAL_FLASH_Lock();
if(feedback != HAL_OK)
return(feedback);
/* Program the user Flash area word by word*/
tFlashAddress = FlashAddress;
tParAddress = ParAddress;
HAL_FLASH_Unlock();
while ((tParAddress < EndAddress) && (feedback == 0))
{
feedback = HAL_FLASH_Program(FLASH_TYPEPROGRAM_FAST,tFlashAddress, *(__IO uint32_t *)tParAddress);
if(feedback != HAL_OK)
return(feedback);
tFlashAddress = tFlashAddress + 4;
tParAddress = tParAddress + 4;
}
HAL_FLASH_Lock();
/* Check if the programmed data is OK */
tFlashAddress = FlashAddress;
tParAddress = ParAddress;
while ((tParAddress < EndAddress) && (feedback == 0))
{
if (*(__IO uint32_t *)tParAddress != *(__IO uint32_t *)tFlashAddress)
{
feedback = HAL_ERROR;
}
tFlashAddress = tFlashAddress + 4;
tParAddress = tParAddress + 4;
}
return(feedback);
}
