硬汉嵌入式论坛

 找回密码
 立即注册
查看: 997|回复: 3
收起左侧

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

[复制链接]

334

主题

2033

回帖

3040

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3040
发表于 2023-6-11 10:09:34 | 显示全部楼层 |阅读模式
由于使用内部flash作为数据存储,需要执行擦除函数。

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

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

Snipaste_2023-06-11_10-03-14.png

回复

使用道具 举报

334

主题

2033

回帖

3040

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3040
 楼主| 发表于 2023-6-12 08:12:33 | 显示全部楼层
在st论坛上找到一些类似的问题。 符合我这个现象的原因可能是以下这个:
为了调试方便 屏蔽了看门狗的初始化。 // MX_IWDG_Init();
但是,看门狗的刷新函数没有屏蔽,HAL_IWDG_Refresh(&hiwdg);
这样会导致flash的PGSERR置位。虽然很难理解这个怎么会影响到flash的状态了,可也不影响程序的运行。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106856
QQ
发表于 2023-6-12 09:21:49 | 显示全部楼层
caicaptain2 发表于 2023-6-12 08:12
在st论坛上找到一些类似的问题。 符合我这个现象的原因可能是以下这个:
为了调试方便 屏蔽了看门狗的初始 ...

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

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

回复

使用道具 举报

2

主题

39

回帖

45

积分

新手上路

积分
45
发表于 2024-1-10 18:56:35 来自手机 | 显示全部楼层
f401otaHAL_IWDG_Refreshпflashpgp pgsλflashι
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-8 04:01 , Processed in 0.261225 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表