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

Posted

技术标签:

【中文标题】无法使用 HAL 驱动程序在 STM32F429 上写入双字【英文标题】:Can't write Double word on STM32F429 using HAL driver 【发布时间】:2018-12-20 23:43:16 【问题描述】:

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

【问题讨论】:

我建议注册方法。没有神奇的 HAL 功能。使用寄存器的 FLASH 写入功能 - 10 分钟,“简单” HAL 库一 - 数小时或数天。 【参考方案1】:

没有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;

【讨论】:

以上是关于无法使用 HAL 驱动程序在 STM32F429 上写入双字的主要内容,如果未能解决你的问题,请参考以下文章

STM32F429开发板用户手册第31章 STM32F429的SPI总线基础知识和HAL库API

STM32F429开发板用户手册第23章 STM32F429的USART串口基础知识和HAL库API

STM32F429必备的HAL库API(重要)

带有 HAL 库的 STM32F4-Discovery (STM32F429ZIT6) 上的 RS232 (UART)?

一个基于STM32F429 HAL库的学习工程模板

STM32F429基于CUBEMX的串口中断接收