博客分享:单片机内部FLASH的字节操作
cathy -- 周一, 12/07/2020 - 16:52一般32位单片机的内部FALSH是不支持字节操作的,有的可以按字节读取,但是不能按字节写入。
而且,一般单片机内部FALSH擦除的最小单位都是页,如果向某页中的某个位置写入数据,恰好这个位置的前面存了其他数据,那么就必须把这页擦除,存的其他数据也会丢失。
实际上就是说内部的FALSH不好做改写的操作,如果有很多数据需要存放,最好是分页存储。这也是FALSH与E2PROM最大的区别,后者支持按字节操作且无需擦除,即使某一个地址写坏了,也不影响其他地址。
下面介绍一种方法让内部FLASH"支持"字节操作,且同一页的其他数据不受影响。
方法原理很简单,下面简单介绍下原理:
1.根据要写入地址,计算出该地址位于哪一页;
2.读出整个页,存入缓存BUF;
3.将要写入的数据按位置更新到BUF中;
4.擦除该页;
5.写入整个BUF。
可以看出这种方法弊端很明显:
1.耗时长 每次写都要读整个BUF,然后还要先把数据存到BUF里,然后再写入整个BUF;
2.FALSH擦写次数增加,降低使用寿命;
下面给出测试代码: