简体   繁体   中英

Flash Sector Erase - STM32F207

I currently have this code setup to erase a specific sector of the STM32F207 internal flash (in a freeRTOS environment):

    static void eraseSector(uint32_t sector)
    {
        FLASH_EraseInitTypeDef eraseInitStruct = { 0 };
        HAL_StatusTypeDef status = HAL_OK;
     
        if( HAL_FLASH_Unlock() != HAL_OK )
        {
            printDebug("Error unlocking Flash\r\n");
        }
     
        eraseInitStruct.TypeErase = TYPEERASE_SECTORS;
        eraseInitStruct.VoltageRange = VOLTAGE_RANGE_3;
        eraseInitStruct.Sector = sector;
        eraseInitStruct.NbSectors = 1;
     
        status = HAL_FLASHEx_Erase_IT(&eraseInitStruct);
        if (status != HAL_OK)
        {
            print("Unable to erase Sector: %d\n", status);
        }
        else
        {
            print("Flash sector %d erased. Status: %d\n", sector, status);
        }

        /* Wait for the erase operation to complete */
        osSemaphoreWait(FlashOperation_sem, osWaitForever);

        if( HAL_FLASH_Lock() != HAL_OK )
        {
            print("Error locking Flash\n");
        }
    }

When this code executes, the application resets/crashes whenever the FLASH_CR Start bit is set in FLASH_Erase_Sector() (called from the HAL_FLASHEx_Erase_IT() function). I've attempted this with multiple unused flash sectors and they all crash.

I've also attempted directly calling FLASH_Erase_Sector() and the same persists.

Turns out my crashes were caused by my Watchdog dying (terrible oversight on my part). I temporarily disable the watchdog during the flash erase & write operations and it works fine.

The better option, though, would be to place the functionality in RAM (as suggested by @old_timer & @kkrambo) to prevent the CPU from being blocked for too long.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM