Не могу написать двойное слово на STM32F429, используя драйвер HAL

Я пытаюсь написать uint64_t(двойное слово) переменная во флэш-память, но безуспешно. Вот код

#define APPLICATION_START_ADDRESS                                   0x8008000

void flashErase(uint8_t startSector, uint8_t numberOfSectors)
{
    HAL_FLASH_Unlock();

    Flash_eraseInitStruct.TypeErase     = FLASH_TYPEERASE_SECTORS;
    Flash_eraseInitStruct.VoltageRange  = FLASH_VOLTAGE_RANGE_3;
    Flash_eraseInitStruct.Sector        = startSector;
    Flash_eraseInitStruct.NbSectors     = numberOfSectors;

    if(HAL_FLASHEx_Erase(&Flash_eraseInitStruct, &Flash_halOperationSectorError) != HAL_OK)
    {
        Flash_raiseError(errHAL_FLASHEx_Erase);
    }

    HAL_FLASH_Lock();
}

int main(void)
{
    HAL_Init();
    main_clockSystemInit();
    __IO uint64_t word =  0x1234567890;

    flashErase(2, 1);
//  flashProgramWord(aTxBuffer, APPLICATION_START_ADDRESS, 2 );
    HAL_FLASH_Unlock();
    HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, APPLICATION_START_ADDRESS, word);
}

Я поднял флаг ошибки PGSERR а также PGAERR, Операция стирания проходит без проблем. Но программирование возвращает ОШИБКУ. Некоторые идеи?

1 ответ

Решение

Нету STM32F249, вы имели ввиду STM32F429?

Чтобы использовать 64-битное программирование, VPP (BOOT0) должен питаться от 8 до 9 Вольт. Это?

См. Справочное руководство, раздел 3.6.2.

Кстати,

__IO uint64_t word =  0x1234567890;

не будет работать, как (предположительно) ожидалось. Это 32-битная архитектура, целочисленные константы будут усечены до 32 бит, если нет L суффикс. U не повредит также, потому что переменная без знака. __IO не нужно

uint64_t word =  0x1234567890UL;
Другие вопросы по тегам