wbgbg20002000 发表于 2024-8-8 14:55

写FLASH失败

求助采用STM32G473CBT6,写片内FLASH失败,代码如下:
      //.ROM_D0 :ER_IROM1 0x08000000 0x00020000
         __attribute__((section(".ROM_D0"))) static uint64_t Key_Flash=(uint64_t)(-1);
    __IOuint64_tKey_ID=0x1234567812345678;
    __HAL_FLASH_PREFETCH_BUFFER_DISABLE();   //关闭FLASH预取缓冲区
    if((uint64_t)(-1)==Key_Flash)
    {               
      HAL_FLASH_Unlock();
      __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);
      HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, (uint32_t)&Key_Flash, Key_ID);
      HAL_FLASH_Lock();
    }

laocuo1142 发表于 2024-8-8 17:08

检查Flash是否处于写保护状态

flycamelaaa 发表于 2024-8-8 18:00

检查Flash写入函数的实现

powerantone 发表于 2024-8-8 19:23

Flash区域未被正确擦除

probedog 发表于 2024-8-8 21:23

在Flash写入操作后,检查相关的错误标志(如FLASH_FLAG_PGERR、FLASH_FLAG_WRPRTERR等),以确定写入失败的具体原因。

classroom 发表于 2024-8-8 23:23

查阅STM32G473CBT6的官方数据手册和参考手册

xionghaoyun 发表于 2024-8-9 08:43

关闭保护再写

wbgbg20002000 发表于 2024-8-9 08:51

xionghaoyun 发表于 2024-8-9 08:43
关闭保护再写

没有任何写保护

wbgbg20002000 发表于 2024-8-9 09:12

probedog 发表于 2024-8-8 21:23
在Flash写入操作后,检查相关的错误标志(如FLASH_FLAG_PGERR、FLASH_FLAG_WRPRTERR等),以确定写入失败的 ...

发生FLASH_FLAG_PGSERR,FLASH_FLAG_PGAERR

wbgbg20002000 发表于 2024-8-9 09:14

powerantone 发表于 2024-8-8 19:23
Flash区域未被正确擦除

Key_Flash初始化为0xFFFFFFFFFFFFFFFFUL, 无需擦除?

stormwind123 发表于 2024-8-9 10:26

电源或时钟不稳定

wbgbg20002000 发表于 2024-8-9 10:48

stormwind123 发表于 2024-8-9 10:26
电源或时钟不稳定

启动延时了100ms, 还是写不进去

dalong-168 发表于 2024-8-9 11:43

好帖,学习了

呐咯密密 发表于 2024-8-9 15:43

写的地址是不是不合法

wbgbg20002000 发表于 2024-8-9 17:56

本帖最后由 wbgbg20002000 于 2024-8-10 08:30 编辑

呐咯密密 发表于 2024-8-9 15:43
写的地址是不是不合法
调试跟踪,写入的地址是0x08007CA8

classroom 发表于 2024-8-10 17:00

查阅STM32G473CBT6的官方数据手册和参考手册

铁血丹心LLLL 发表于 2024-8-28 00:51

STM32的FLASH写入操作通常需要先将要写入的整个页面擦除,然后才能进行编程操作。

烟雨蒙蒙520 发表于 2024-8-28 12:14

确保写入地址是对齐的。HAL_FLASH_Program 函数要求地址对齐,通常为双字(8 字节)对齐。

公羊子丹 发表于 2025-3-16 07:50

你试过检查 FLASH_FLAG_OPTVERR 和其他相关的 FLASH 错误标志吗?有可能是写入权限或保护设置问题。

周半梅 发表于 2025-3-16 07:51

可以试着在 HAL_FLASH_Program 前加一个延时,确认是否是因为执行太快,导致写入操作没有完成。
页: [1] 2
查看完整版本: 写FLASH失败