メモ書きブログ

日々の覚書

STM32で行儀よくFLASH読み書き

STM32でライブラリ使えば簡単に読み書きできる。ST凄い。

uint8_t flash_erase()
{
    uint32_t error_sector;
    FLASH_EraseInitTypeDef EraseInitStruct;
    HAL_StatusTypeDef result;

    HAL_FLASH_Unlock();

    /* Fill EraseInit structure*/
    EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
    EraseInitStruct.Banks = FLASH_BANK_1;
    EraseInitStruct.Page = 63;
    EraseInitStruct.NbPages = 1;

    result = HAL_FLASHEx_Erase(&EraseInitStruct, &error_sector);
    HAL_FLASH_Lock();

    return result == HAL_OK && error_sector == 0xFFFFFFFF;
}

uint8_t flash_write()
{
    uint64_t data = 88;
    HAL_StatusTypeDef result;

    flash_erase();
    HAL_FLASH_Unlock();

    uint32_t Address = 0x0801F800;
    result = HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, Address, data);

    HAL_FLASH_Lock();
    return result == HAL_OK;
}

uint8_t flash_read()
{
    uint32_t address = 0x0801F800;
    uint8_t *data = (uint8_t *)address;
    return *data;
}