打印
[应用相关]

关于STM32G0 flash擦除失败问题

[复制链接]
868|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
根特皇宫w|  楼主 | 2022-2-24 17:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32G0flash擦除每次都失败,无论大面积擦除还是一页页擦错都失败。且出错后打印出来的PageError=0。擦除部分程序如下
<font face="Tahoma, Verdana, Arial, Microsoft Yahei, sans-serif" style="outline: none; color: rgb(0, 0, 0); font-size: 15px; background-color: rgb(232, 232, 232);"><font color="#333333" style="outline: none;"><font style="outline: none; font-size: 14px;">
</font></font></font><font style="outline: none; font-size: 15px; background-color: rgb(232, 232, 232); color: rgb(51, 51, 51);"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;"></font></font><font color="#333333" style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;">HAL_FLASH_Unlock();</font></font></font>
<font style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;"></font></font><font color="#333333" style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;">Page_Mum = GetPage(addr);</font></font></font>
<font style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;"></font></font><font color="#333333" style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;">FlashEraseInit.TypeErase=FLASH_TYPEERASE_PAGES;    //擦除类型,页擦除</font></font></font>
<font style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;"></font></font><font color="#333333" style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;">FlashEraseInit.Page=Page_Mum;   </font></font></font><font style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;"> </font></font></font><font color="#333333" style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;">  </font></font></font><font style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;"> </font></font></font><font color="#333333" style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;">//从哪页开始擦除</font></font></font>
<font style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;"></font></font><font color="#333333" style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;">FlashEraseInit.NbPages=pagenum;                        </font></font></font>
<font style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;"></font></font><font color="#333333" style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;">if(HAL_FLASHEx_Erase(&FlashEraseInit&PageError)!=HAL_OK)</font></font></font>
<font style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;"></font></font><font color="#333333" style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;">{</font></font></font>
<font style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;"></font></font><font color="#333333" style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;">printf("flash_error_addr:%x\r\n"PageError);</font></font></font>
<font style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;"></font></font><font color="#333333" style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;">printf("flash_easre_error\r\n");</font></font></font>
<font style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;"></font></font><font color="#333333" style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;">while(1);</font></font></font>
<font style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;"></font></font><font color="#333333" style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;">}</font></font></font>
<font style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;"></font></font><font color="#333333" style="outline: none;"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;">FLASH_WaitForLastOperation(FLASH_WAITETIME);            //等待上次操作完成</font></font></font>
<div align="left" style="outline: none; word-break: break-all; color: rgb(0, 0, 0);"><font style="outline: none; color: rgb(51, 51, 51);"><font face="Tahoma, Verdana, Arial, &quot;" style="outline: none;"><font style="outline: none; font-size: 14px;">HAL_FLASH_Lock();</font></font></font></div></font></font></font></font></font></font></font></font></font></font></font></font>


使用特权

评论回复
沙发
地下縱情搖擺| | 2022-11-20 12:24 | 只看该作者
你采用什么方式实现擦除的啊?

使用特权

评论回复
板凳
林间有新绿| | 2022-11-20 12:56 | 只看该作者
是不是你擦除的位置不对呢?

使用特权

评论回复
地板
情和欲| | 2022-11-20 13:28 | 只看该作者
一般情况,擦除之前需要解锁的,你怎么弄的呢?

使用特权

评论回复
5
偷吻月亮| | 2022-11-20 14:00 | 只看该作者
可不可以把你代码发出来看看,这方面我还有点经验

使用特权

评论回复
6
一枝香| | 2022-11-20 14:32 | 只看该作者
感觉是你没解锁,导致flash擦除失败了吧

使用特权

评论回复
7
风吻过你的不羁| | 2022-11-20 15:04 | 只看该作者
你可以参考一下官方的对flash操作的程序demo,学习一下

使用特权

评论回复
8
笨蛋无需搭理| | 2022-11-20 15:36 | 只看该作者
正常来说,擦除flash需要一页一页的擦除的

使用特权

评论回复
9
喜爱弄人| | 2022-11-20 16:08 | 只看该作者
这个建议还是楼主使用外置的flash,这样好处理一些

使用特权

评论回复
10
漫过岁月| | 2022-11-20 16:40 | 只看该作者
一般flash是按页擦除的,而且要擦除程序之外的,不然擦完,程序就不好用喽

使用特权

评论回复
11
极客晨星| | 2022-11-20 17:12 | 只看该作者
大面积擦,你是怎么擦的?

使用特权

评论回复
12
SantaBunny| | 2023-2-21 12:33 | 只看该作者
STM32G0芯片LL库没有对Flash的操作需要自己实现,可借鉴HAL库。

使用特权

评论回复
13
SantaBunny| | 2023-2-21 12:33 | 只看该作者
STM32G0芯片LL库没有对Flash的操作需要自己实现,可借鉴HAL库。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

115

帖子

0

粉丝