因为项目需要,有一部分配置的数据需要保存到FLASH存储区。于是查看了官方的手册,STM32F429ZI是按照扇区划分,划分为Bank1和Bank2。其中每一个块又划分为12个扇区,4个16kb,1个64kb,7个128kb。我拟定将要存储的数据放到Bank1的第3个16kb的扇区中。即起始地址为0x08008000的FLASH位置。同时我也参考了官方的例程,但是擦除和写入数据过程均出现了很奇怪的问题。代码是用STM32CubemX生成,编译器是Keil5代码截取了关键部分和现象如下图。
初始化后的主程序
然后是我的串口打印数据
串口打印1
串口打印2
原子哥可以看到,我在串口打印均没有出现报错(擦除失败,写入失败等)。程序的数组是正确无误的,但是写入的FLASH的地址的数据,除了第一次写入是正常的以外,其他的均不正常。内部FLASH在没有任何数据的情况是全1的,擦除后也应该是全1。数据在写入后某些位置变为0。程序第一次写入数据是全部写进去了的。那么可以判断FLASH的写数据函数应该是没有问题。擦除后也不是完全是0,也是擦了很多遍才是全0,所以我判断是FLASH擦除函数有问题。但是我没找到解决的方案。
另外请问一下原子哥一个问题:
1.在F103系列,FLASH扇区都是1KB或者2KB一页,在F4中大小容量均变了,那么我写入一个数据就需要擦除16kb的大小吗?或者说是我需要单独留出16kb的大小来存放一部分配置文件吗?
|