写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();
}
检查Flash是否处于写保护状态 检查Flash写入函数的实现 Flash区域未被正确擦除 在Flash写入操作后,检查相关的错误标志(如FLASH_FLAG_PGERR、FLASH_FLAG_WRPRTERR等),以确定写入失败的具体原因。 查阅STM32G473CBT6的官方数据手册和参考手册 关闭保护再写 xionghaoyun 发表于 2024-8-9 08:43
关闭保护再写
没有任何写保护 probedog 发表于 2024-8-8 21:23
在Flash写入操作后,检查相关的错误标志(如FLASH_FLAG_PGERR、FLASH_FLAG_WRPRTERR等),以确定写入失败的 ...
发生FLASH_FLAG_PGSERR,FLASH_FLAG_PGAERR powerantone 发表于 2024-8-8 19:23
Flash区域未被正确擦除
Key_Flash初始化为0xFFFFFFFFFFFFFFFFUL, 无需擦除? 电源或时钟不稳定 stormwind123 发表于 2024-8-9 10:26
电源或时钟不稳定
启动延时了100ms, 还是写不进去 好帖,学习了 写的地址是不是不合法 本帖最后由 wbgbg20002000 于 2024-8-10 08:30 编辑
呐咯密密 发表于 2024-8-9 15:43
写的地址是不是不合法
调试跟踪,写入的地址是0x08007CA8 查阅STM32G473CBT6的官方数据手册和参考手册 STM32的FLASH写入操作通常需要先将要写入的整个页面擦除,然后才能进行编程操作。 确保写入地址是对齐的。HAL_FLASH_Program 函数要求地址对齐,通常为双字(8 字节)对齐。 你试过检查 FLASH_FLAG_OPTVERR 和其他相关的 FLASH 错误标志吗?有可能是写入权限或保护设置问题。 可以试着在 HAL_FLASH_Program 前加一个延时,确认是否是因为执行太快,导致写入操作没有完成。
页:
[1]
2