[STM32G4] 写FLASH失败

[复制链接]
4238|28
 楼主| wbgbg20002000 发表于 2024-8-8 14:55 | 显示全部楼层 |阅读模式
求助采用STM32G473CBT6,  写片内FLASH失败,代码如下:
        //.ROM_D0 :ER_IROM1 0x08000000 0x00020000
         __attribute__((section(".ROM_D0"))) static uint64_t Key_Flash=(uint64_t)(-1);  
    __IO  uint64_t  Key_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 | 显示全部楼层

没有任何写保护
 楼主| 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

主题

33

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部