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

时间:2018-07-12 16:44:42

标签: stm32 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);
}

我收到错误标记PGSERRPGAERR的提示。擦除操作没有问题。但是编程返回错误。 有想法吗?

1 个答案:

答案 0 :(得分:2)

没有STM32F249,您是说STM32F429吗?

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

请参见Reference Manual第3.6.2节

enter image description here

顺便

__IO uint64_t word =  0x1234567890;

将无法(大概)正常工作。它是一种32位体系结构,除非后缀为L,否则整数常量将被截断为32位。 U也不会受到伤害,因为变量是无符号的。 __IO是不必要的。

uint64_t word =  0x1234567890UL;