下面贴一下我的初始化代码
while(status != HAL_OK)
{
status = HAL_FLASH_Unlock();
}
/* Clear OPTVERR bit set on virgin samples */
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);
while(addr + offset < addr + len)
{
bank = GetBank(addr + offset);
EraseInitStruct.Banks = bank;
EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
EraseInitStruct.Page = GetPage(addr + offset);
//EraseInitStruct.Page = (addr + offset)/FLASH_PAGE_SIZE;
EraseInitStruct.NbPages = 1;
offset += FLASH_PAGE_SIZE;
status = HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError);
if (status != HAL_OK)
{
printf("flash erase fail, addr:0x%x, len:0x%x, errpage:%d, errcode:%d, ret:%d\r\n", \
addr, len, PAGEError, pFlash.ErrorCode, status);
ret = -1;
goto lock;
}
}
|