caicaptain2 发表于 2023-6-11 10:09:34

stm32的内部flash触发PGSERR标志,导致HAL库的擦除失败,可能什么原因?

由于使用内部flash作为数据存储,需要执行擦除函数。

使用HAL库的擦除函数HAL_FLASHEx_Erase()时,debug跟踪发现PGSERR触发了,导致擦除失败。
如果在这个erase函数前面,强制执行__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_SR_ERRORS) 这个清除标志的函数,擦除函数就可以正常执行。

擦除函数即使提前到main函数的开始阶段,也会发现PGSERR触发了,什么都没有干,怎么会造成flash这个错误标志呢?
看了参考手册,没有搞明白



caicaptain2 发表于 2023-6-12 08:12:33

在st论坛上找到一些类似的问题。 符合我这个现象的原因可能是以下这个:
为了调试方便 屏蔽了看门狗的初始化。 // MX_IWDG_Init();
但是,看门狗的刷新函数没有屏蔽,HAL_IWDG_Refresh(&hiwdg);
这样会导致flash的PGSERR置位。虽然很难理解这个怎么会影响到flash的状态了,可也不影响程序的运行。

eric2013 发表于 2023-6-12 09:21:49

caicaptain2 发表于 2023-6-12 08:12
在st论坛上找到一些类似的问题。 符合我这个现象的原因可能是以下这个:
为了调试方便 屏蔽了看门狗的初始 ...

如果开看门狗,调试期间必须要处理。

DBGMCU寄存器冻结看门狗即可
https://www.armbbs.cn/forum.php?mod=viewthread&tid=111266

落叶凋零 发表于 2024-1-10 18:56:35

f401otaHAL_IWDG_Refreshпflashpgp pgsλflashι
页: [1]
查看完整版本: stm32的内部flash触发PGSERR标志,导致HAL库的擦除失败,可能什么原因?