|
程序如下,使用的是官方的例子,单独运行官方例子时正常,但是移植到程序中时会卡在if (HAL_FLASHEx_Erase(&EraseInitStruct,&SectorError) !=HAL_OK)中,返回为错误值,
不知道问题出在哪里
uint32_t FirstSector = 0, NbOfSectors = 0, Address = 0;
uint32_t SectorError = 0;
u16 i,j;
FirstSector=GetSector(FLASH_USER_START_ADDR);
NbOfSectors = GetSector(FLASH_USER_END_ADDR) - FirstSector + 1;
HAL_FLASH_Unlock();
EraseInitStruct.TypeErase=FLASH_TYPEERASE_SECTORS;
EraseInitStruct.NbSectors=NbOfSectors;
EraseInitStruct.Sector=FirstSector;
EraseInitStruct.VoltageRange=FLASH_VOLTAGE_RANGE_3;
if (HAL_FLASHEx_Erase(&EraseInitStruct,&SectorError) !=HAL_OK)
{
return HAL_ERROR;
}
__HAL_FLASH_DATA_CACHE_DISABLE();
__HAL_FLASH_INSTRUCTION_CACHE_DISABLE();
__HAL_FLASH_DATA_CACHE_RESET();
__HAL_FLASH_INSTRUCTION_CACHE_RESET();
__HAL_FLASH_INSTRUCTION_CACHE_ENABLE();
__HAL_FLASH_DATA_CACHE_ENABLE();
Address = FLASH_USER_START_ADDR;
for(i=0; i<NumToWrite; i++)
{
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, pBuffer[i]) == HAL_OK)
{
Address = Address + 4;
}
else
{
return HAL_ERROR;
}
}
HAL_FLASH_Lock();
|
|