首页 > 解决方案 > 无法使用 HAL 驱动程序在 STM32F429 上写入双字

问题描述

我正在尝试将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. 擦除操作没有问题。但是编程返回错误。一些想法?

标签: stm32hal

解决方案


没有STM32F249,你说的是STM32F429吗?

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

请参阅参考手册第 3.6.2 节

在此处输入图像描述

顺便一提,

__IO uint64_t word =  0x1234567890;

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

uint64_t word =  0x1234567890UL;

推荐阅读