flash游戏编程基础教程

这里就STM32L053芯片的FLASH编程做一个简单的演示和一些提醒,供有需要的人参考。

一般来说,FLASH编程主要包括擦除、代码编程和选项字修改,以下不涉及选项编程。STM32L0芯片的擦除不仅支持整页擦除,还支持分页擦除。每页的大小是128字节,也就是32个字。编程可以通过字或半页[64字节]来完成。单页擦除、单字编程、半页编程的时间是一样的,都是3.2ms左右,芯片数据手册里也说的很清楚。

flash游戏编程基础教程

这里有两个提醒。第一,在擦除或编程时,要注意地址对齐的问题。擦除一页时,地址要按128字节对齐,编程一个字时,按4字节对齐,编程半页时,按64字节对齐。还有一点就是在做半页编程的时候,半页编程的执行代码要放在RAM里,这也是手册里强调的。

下面演示字编程、页编程和页擦除的操作。这里我先用字编程模式写五个字,然后用半页编程模式FLASH编程五页半,记录下他们所花的时间,看看字编程时间和半页编程是否一致。另外,在编程完五页半后,进行一次页面擦除操作,擦除刚编程完的五页半中的一页,也就是最后应该只剩下三页半(注:对于STM32L0系列芯片,擦除后内部FLASH全为零)。

下面的代码截图是基于STM32Cube库整理的,主要涉及三个操作:字编程、半页编程、页擦除,对应三个带绿色下划线的库函数。

其中半页编程的执行代码需要配置到RAM中才能运行。另外,Period1和Period2用于分别存储写5个字和5个半页的编程时间,并放在指定的FLASH位置。编译运行后,我们可以看到以下结果:

上面的截图是芯片内部一些FLASH空运行后的内容。五个红框包围的数据是五个字编程的结果,蓝框的数据是五页半编程的结果,但最后只看到三页半的编程内容,因为页擦除操作后后面两页半的内容消失了。

用于计算编程时间的定时器的计数频率为1MHz。显然,周期1和周期2基本相等,将它们除以5得到的编程时间是3.3 ms..显然,在编写批处理代码时,使用半页编程效率更高。

前面说过,在做半页编程的时候,它的执行代码需要放到RAM中才能运行,代码在STM32cube库的这个文件stm32l0xx_hal_flash_ramfunc.c中。对于不同的ide,实现该操作略有不同。这里是一个基于ARM MDK的简单配置,分区点RAM用于它。

STM32L0系列FLASH编程的演示在这里,希望可以帮助有需要的人节省一些时间和精力。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

发表回复

登录后才能评论