无法使用HAL驱动程序在STM32F429上写入双字

Can't write Double word on STM32F429 using HAL driver

我正在尝试将 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);
}

我收到错误标志 PGSERRPGAERR。擦除操作没有问题。但是编程 returns 错误。 一些想法?

没有STM32F249,你说的是STM32F429吗?

为了使用 64 位编程,VPP (BOOT0) 必须由 8 - 9 伏供电。是吗?

参见 Reference Manual 第 3.6.2 节

顺便说一句,

__IO uint64_t word =  0x1234567890;

不会像(大概)预期的那样工作。它是 32 位架构,整数常量将被截断为 32 位,除非有 L 后缀。 U 也不会造成伤害,因为该变量是无符号的。 __IO 是不必要的。

uint64_t word =  0x1234567890UL;