打印
[STM32L1]

STM32L151为何FLASH擦除后全是是0x00?

[复制链接]
4797|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 nicholasldf 于 2017-12-8 17:39 编辑

以前记得擦除后是0xFF的,,今天调试发现,STM32L151调用官方库函数FLASH擦除也没有报错啊,但数据却全是0x00。。。
但是编程数据写进去是可以的,而且写数据也是正确的。。。奇怪了

翻遍了用户手册《STM32L1xxx Reference Manual.pdf》和数据手册《STM32L151x&L152x.pdf》,,,
也没有找到任何一个地方说明,,FLASH擦除后是0x00还是0xFF。。。

//Erase the sector(total 16 pages)
HAL_FLASH_Unlock();
EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;
EraseInitStruct.PageAddress = USER_DATA_ADDRESS_SECTOR1 + (CurSector-1)*0x1000;
EraseInitStruct.NbPages     = 16;
HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError);
HAL_FLASH_Lock();

以下是FLASH数据截图,,写进去是对的,,读出来的数据,有时候可以读对,,有时候读的数据是错的。

用STM32L512-Discovery开发板测试,,发现擦除后,,ST-LINK监控FLASH也全是0值

沙发
airwill| | 2017-12-5 19:36 | 只看该作者
难道是设置了读保护了?

使用特权

评论回复
板凳
antusheng| | 2017-12-5 19:40 | 只看该作者
STM32 ST-LINK Utility试过没、?

使用特权

评论回复
地板
nicholasldf|  楼主 | 2017-12-5 19:42 | 只看该作者
没有读写保护,,我另一个地方用到flash读写,,是对的

使用特权

评论回复
5
nicholasldf|  楼主 | 2017-12-8 17:06 | 只看该作者
本帖最后由 nicholasldf 于 2017-12-8 17:20 编辑

请教大牛们?怎么解释?JLINK监控FLASH数据,,写进去是对的,,读出来的数据,有时候可以读对,,有时候读的数据是错的。

心率数据FLASH截图_20171208.png (56.94 KB )

心率数据FLASH截图_20171208.png

使用特权

评论回复
6
nicholasldf|  楼主 | 2017-12-8 17:40 | 只看该作者
用STM32L512-Discovery开发板测试,,发现擦除后,,ST-LINK监控FLASH也全是0值

使用特权

评论回复
7
nicholasldf|  楼主 | 2017-12-9 13:35 | 只看该作者
antusheng 发表于 2017-12-5 19:40
STM32 ST-LINK Utility试过没、?

不管是J-LINK的JFLASH,还是ST-LINK Utility,,,擦除之后都是0x00,,怀疑是我们的板子有问题,,结果STM32L152-Discpvery开发板也是一样的

使用特权

评论回复
8
nicholasldf|  楼主 | 2017-12-9 13:44 | 只看该作者
STM32F103Flash擦除是可以的,,,STM32L1系列到底是啥奇怪的问题呢?芯片BUG?

STM32F103Flash擦除OK.JPG (375.85 KB )

STM32F103Flash擦除OK.JPG

使用特权

评论回复
9
Xflyan| | 2017-12-9 14:27 | 只看该作者
本帖最后由 Xflyan 于 2017-12-9 14:42 编辑

估计L系列的FLASH结构跟其它系列不一样的,类似于EEPROM的,所以擦掉后是00,不是FF的
RM0038提到L系列的FLASH和EEPROM属于同一个模块 NVM module 管理的

另外按这么理解,FLASH应该也是可以不擦除直接写的,不知道可不可以......


http://blog.csdn.net/wangsanhuai2010/article/details/7932867

使用特权

评论回复
10
Xflyan| | 2017-12-9 14:48 | 只看该作者
查了一下代码,EEPROM的写入不是00的话,还是要先擦一遍再写入的

使用特权

评论回复
11
nicholasldf|  楼主 | 2017-12-13 09:21 | 只看该作者
这个问题还没有解决,,,,FLASH要先擦后写才行,,擦除后都是0xFF,,我用J-LINK和STLINK直接擦除,,都是0x00,,

使用特权

评论回复
12
grant_jx| | 2017-12-13 12:32 | 只看该作者
Flash 全擦不应该是0xFF吗?

使用特权

评论回复
13
nicholasldf|  楼主 | 2017-12-13 14:50 | 只看该作者
grant_jx 发表于 2017-12-13 12:32
Flash 全擦不应该是0xFF吗?

我擦了,都是0x00,很奇怪。。。用STM32L512Discovery开发板也是这样,,,有哪位帮忙试试,,用jlink或者stlink擦除后再回读看看结果。

使用特权

评论回复
14
nicholasldf|  楼主 | 2017-12-15 13:54 | 只看该作者
问题调试OK:
(1)STM32代理FAE工程师回复说,STM32L、STM8S、STM8L这几个系列的内部Flash特性就是如此,执行擦除后就是0x00,,跟以往的STM32不一样,其他擦除后的状态为0xFF;
(2)某函数存在BUG,导致第一次数据返回正确,第二次及以后数据返回出错。

使用特权

评论回复
15
zhifeng| | 2018-1-10 08:26 | 只看该作者
擦除是0,写入非0

使用特权

评论回复
16
gejigeji521| | 2018-1-11 21:48 | 只看该作者
应该现在擦除就是写0了。

使用特权

评论回复
17
aozima| | 2018-1-16 16:17 | 只看该作者
STM32代理FAE工程师回复说,STM32L、STM8S、STM8L这几个系列的内部Flash特性就是如此,执行擦除后就是0x00,,跟以往的STM32不一样,其他擦除后的状态为0xFF;
学习了

使用特权

评论回复
18
pmp| | 2018-1-16 22:16 | 只看该作者
这个是不是自己编写的?

使用特权

评论回复
19
mmbs| | 2018-1-16 22:17 | 只看该作者
擦除之后,怎么设置的?

使用特权

评论回复
20
pmp| | 2018-1-16 22:20 | 只看该作者
能够使用就可以了。

使用特权

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

本版积分规则

61

主题

261

帖子

10

粉丝